15蓝桥杯省模拟赛 3个1 填空

193 阅读1分钟

3个1【省模拟赛】 - 蓝桥云课 (lanqiao.cn)

image.png

思想

题目的意思是找出从出 第23个满足条件的数 (从1开始)

条件是 : 一个数 转化为 二进制 之后,二进制中 有三个1

例如 7 ,转为二进制之后 111

那我们可以枚举,把每个数都用位运算拆分,把每一位都拆出来,然后数有多少个1、

code

image.png

在蓝桥杯平台只能跑到第12个数就跑不出来了:

image.png

在devc可以跑出来:

image.png

方法2 取模

image.png

#include <iostream>
using namespace std;

int main() {
	int cnt = 0;
	int i = 0;
	int t = 0;

	while (1) {
		t = 0;
		for (int j = 0; j < 31; ++j) {
			if ( (i >> j) & 1)
				++t;
		}

		if (t == 3) {
			++cnt;
			cout << cnt << ":" << i << endl;
			if (cnt >= 23)
				break;
		}

		++i;
	}
	return 0;
}