神奇数---能将一个数的各个数字分成两组,两组数字的和相同。
例如242,分成{2,2}和{4}。给定一个区间,统计区间内神奇数的个数。
#include<iostream>
#include<map>
#include <string>
using namespace std;
int check(int n,int a[],int &num,int ok) {
int sum1 = 0, sum2 = 0;
map<int,int> s1, s2;
for (int i = 0; i < n; i++) {
s2[a[i]]++;
sum2 += a[i];
}
for (int i = 0; i < n; i++) {
int d = sum1 - sum2;
if (d % 2 == 0 && (s1[d / 2] || s2[-d / 2])) {
//cout << "YES\n";
num++;
cout << num<<" " << ok<<" yes\n";
return 0;
}
sum1 += a[i];
sum2 -= a[i];
s1[a[i]]++;
s2[a[i]]--;
}
//cout << "NO\n";
return 0;
}
void main()
{
int l;
int r;
cin >> l;
cin >> r;
string tar;
int i;
int a;
int p[10];
int num=0;
for (a = l; a <= r; a++) {
tar= to_string(a);
int len = tar.length();
for (i = 0; i<tar.length(); i++)
p[i] = tar[i];
p[i] = '\0';
check(i,p,num,a);
}
cout << num;
getchar();
}