【题目描述】
若将一个正整数化为二进制数,在此二进制数中,我们将数字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类数的个数,中间用单个空格隔开。
【输入样例】
(无)
【输出样例】
(无)
思路
先将十进制数转化为二进制数,在判断是A类数还是B类数,用sum累加,最后输出sum
代码
#include<bits/stdc++.h>
using namespace std;
string er(int n)//转进制
{
string s;
int x;
char c;
if(n==0)
{
cout<<'0'<<endl;
return 0;
}
while(n!=0)
{
x=n%2;
c=x+'0';
s=c+s;//注意:这里不能写反
n=n/2;
}
return s;
}
char ab(string s)//判断是A类数还是B类数
{
int sum0=0,sum1=0;
for(int i=0;i<s.size();i++)
{
if(s[i]=='0')
{
sum0++;
}
if(s[i]=='1')
{
sum1++;
}
}
if(sum0<sum1)return 'A';
else return 'B';
}
int main()
{
int suma=0,sumb=0;
string s;
for(int i=1;i<=1000;i++)
{
s=er(i);
if(ab(s)=='A')suma++;
if(ab(s)=='B')sumb++;
}
cout<<suma<<' '<<sumb<<endl;
return 0;
}