【题目描述】
若将一个正整数化为二进制数,在此二进制数中,我们将数字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<iostream>
using namespace std;
bool judge(int x);
int main()
{
int a=0,b=0;
int i;
for(i=1; i<=1000; i++) //枚举1-1000的数
if(judge(i))//若i是A类数
a++;
else//若i是B类数
b++;
cout<<a<<" "<<b<<endl;
return 0;
}
bool judge(int x)
{
int a=0,b=0;
while(x>0)//将一个数化为二进制数,并判断是A类数还是B类数
{
if(x%2)
a++;//a统计1的个数
else
b++;//b统计0的个数
x/=2;
}
return a>b;//
}
信息学奥赛一本通T1412:函数 二进制分类 归属于 函数,更多同类题解源程序见:函数 和 二进制分类
0 篇文章
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!