#include<iostream> #include<vector> #include<algorithm> using namespace std; bool isnum(int i, int sum, int half,vector<int> &bit) { if (sum == half) return true; if (i >= bit.size()-1) return false; return isnum(i + 1, sum + bit[i + 1], half, bit) || isnum(i + 1, sum , half, bit); } int main() { int l, r; cin >> l >> r; int count = 0; for (size_t i = l; i <=r ; i++) { int num = i; vector<int> bit; int sum = 0; while (num) { sum += num % 10; bit.push_back(num % 10); num = num / 10; } if (sum % 2 == 0) { if (isnum(0,bit[0], sum / 2, bit)) count++; } } cout << count; system("pause"); return 0; } 用的暴力方法,求一个简单点的
#include <iostream>
#include <vector>
using namespace std;
int compute(vector<int> &v, int i){
int sum = 0;
int bit = 1;
for(int k = 0; k < v.size(); ++k){
if(i & bit) sum += v[k];
bit <<= 1;
}
return sum;
}
bool judge(int x){
vector<int> v;
int sum = 0;
while(x){
int digit = x % 10;
if(digit) v.push_back(digit);
x /= 10;
sum += digit;
}
if(sum & 1) return false;
int n = v.size();
int m = 1 << n;
for(int i = 1; i < m; ++i){
int j = (m - 1) ^ i;
if(compute(v, i) == compute(v, j)) return true;
}
return false;
}
int main(){
int l, r;
while(cin>>l>>r){
int res = 0;
for(int x = l; x <= r; ++x){
res += judge(x);
}
cout<<res<<endl;
}
return 0;
}