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

全部评论
我觉得有问题啊,比如1346能通过吗?{1,6}{3,4},但是你这么判断不行吧。
点赞 回复 分享
发布于 2017-09-08 21:20
窝里个去。。为什么一样的思路,我暴力才40%....
点赞 回复 分享
发布于 2017-09-08 21:20
用背包。
点赞 回复 分享
发布于 2017-09-08 21:29

相关推荐

点赞 评论 收藏
分享
图源网络侵权删
dddooola:这个事情我去年8月就看到有人b站(up:程序员正义)在举报了,可能一直在查,这次是查明后的处分了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务