京东编程第二题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; }