【题目描述】
若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。要求输出1到1000中A的个数与B的个数。
【解题技巧】
先转换成二进制,在逐个判断1与0的个数,最后决定A种与B种。
【源代码】
#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
using namespace std;
int main(){
int i,s1=0,s0=0,A=0,B=0,x;//s1记x中1的个数,s2记x中0的个数
for(i=1;i<=1000;i++){//从一到一千枚举
x=i;
while(x!=0){//将x二进制
if(x%2==1)s1++;
else s0++;//计算s1和s2的数量
x/=2;//每次除以二
}
if(s1>s0)A++;
else B++;//判断A种与B种
s1=0;
s0=0;//记得归零
}
printf("%d %d",A,B);//输出尽量用printf
return 0;
}