思想
题目的意思是找出从出 第23个满足条件的数 (从1开始)
条件是 : 一个数 转化为 二进制 之后,二进制中 有三个1
例如 7 ,转为二进制之后 111
那我们可以枚举,把每个数都用位运算拆分,把每一位都拆出来,然后数有多少个1、
code
在蓝桥杯平台只能跑到第12个数就跑不出来了:
在devc可以跑出来:
方法2 取模
#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;
}