京东编程第二题AC
我没想出什么好的算法,就直接用暴力破解,结果竟然ac了。
思路:把每一位的数取出来放在数组并且将每一位相加的sum,如果sum是奇数就不是神奇数,sum是偶数就先排序然后暴力凑sum的一半。然后就AC了,太神奇了。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool qiujie(vector<int>& v, int s, int half) {
if (half == 0) return true;
if (half < 0) return false;
for (int i = s; i < v.size(); ++i) {
if (half - v[i] < 0) return false;
if (qiujie(v, i + 1, half - v[i])) return true;
}
return false;
}
bool countNum(long int n) {
vector<int> v;
int sum = 0;
int half;
while (n) {
sum += n % 10;
v.push_back(n % 10);
n /= 10;
}
if (sum % 2 || v.size() < 2) return false;
half = sum / 2;
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); ++i) {
if (qiujie(v, i + 1, half - v[i])) return true;
}
return false;
}
int main()
{
long int l, r;
while (cin >> l >> r) {
int count = 0;
for (long int i = l; i <= r; ++i) {
if (countNum(i)) ++count;
}
cout << count << endl;
}
return 0;
}
查看20道真题和解析