1412:二进制分类
【题目描述】
若将一个正整数化为二进制数,在此二进制数中,我们将数字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> #include<cmath> #include<cstring> int a[100001]; int mxx(int y)//素数的,没用 { for(int i=2;i<y;i++) if(y%i==0)return 0; return 1; } int digit1(int n)//转换成二进制,返回A或B { int i=0,j=0,k; while(n/2>0)//是0的j加1;是1的i加1;然后返回值是大还是小 { k=n%2; if(k==0) j++; else i++; n=n/2; } i++;//最后还剩1; if(i>j)return 1; else return 0; } using namespace std; int main() { int m,n,i=0,j=0,k=0,sum; for(i=1;i<=1000;i++) { if(digit1(i)) j++; else k++; } printf("%d %d",j,k); return 0; }