京东神奇数80.

//时间复杂度太高。暴力搜索。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

//2进制数加1
void addone(vector<int> & nums) {
	int i = 0;
	int len = nums.size();
	while (i < len) {
		if (nums[i] == 0) {
			nums[i] = 1;
			break;
		}
		else {
			nums[i] = 0;
		}
		i++;
	}
	return;
}
//2进制数各位是否都是1
bool isallone(vector<int> nums) {
	for (int i = 0; i < nums.size(); i++) {
		if (nums[i] == 0) return false;
	}
	return true;
}
//判断是否为神奇数
bool ismagicnum(long n) {
	int sum = 0;
	vector<int> nums;//把各位数存在数组里
	while (n > 0) {
		int temp = (int)(n % 10);
		sum += temp;
		nums.push_back(temp);
		n = n / 10;
	}
	if (sum % 2 != 0) return false;
	sum /= 2;
        //2进制思想搜索,找到就返回true,找不到,2进制数加1.
        //所在位位1,则相加, 不为1,则不加。复杂度老高了。。
	vector<int> tempnums(nums.size());
	while (!isallone(tempnums)) {
		int tempsum = 0;
		for (int i = 0; i < nums.size(); i++) {
			tempsum += nums[i] * tempnums[i];
		}
		if (sum == tempsum) return true;
		addone(tempnums);
	}
	return false;
}

int main() {
	int sum = 0;
	long left;
	long right;
	cin >> left;
	cin >> right;
	while (left <= right) {
		if (ismagicnum(left++))
			sum++;
	}
	cout << sum << endl;
	return 0;
}    

全部评论

相关推荐

喜欢核冬天的哈基米很想上市:会爆NullPointerException的
点赞 评论 收藏
分享
Rena1ssance_:对的,要是面评没太烂,勤更新简历等捞就行了,腾讯可以无限复活
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务