【问题描述】
若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。
例如:
(13)10=(1101)2,其中1的个数为3,0的个数为1,则称此数为A类数;
(10)10=(1010)2,其中1的个数为2,0的个数也为2,称此数为B类数;
(24)10=(11000)2,其中1的个数为2,0的个数为3,则称此数为B类数;
程序要求:求出1~1000之中(包括1与1000),全部A、B两类数的个数。
【输入格式】:
无。
【输出格式】:
一行,包含两个整数,分别是A类数和B类数的个数,中间用单个空格隔开。
【输入样例】:
无
【输出样例】:
无
【参考程序】
#include <cstdio>
#include <iostream>
using namespace std;
bool turn(int x) {
int cntA=0, cntB=0;
while (x != 0) { // 把一个数化为二进制数
if (x % 2) {
cntA++; // 如果这为数为1,计数器cntA加1,否则计数器cntB加1
} else {
cntB++;
}
x /= 2;
}
return cntA>cntB;
}
int main() {
int totA=0, totB=0;
for (int i=1; i<=1000; i++) {
if (turn(i)) { // 1的个数多的为A类数,否则为B类数
totA++;
} else {
totB++;
}
}
cout << totA << " " << totB;
return 0;
}