2311 - 二进制数问题
若将一个正整数化为二进制数,在此二进制数中,我们将数字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表示A类数的个数,B表示B类数的个数,AB之间由一个空格分隔,除此之外不要再输出其他多余的东西。
输入/输出样例
题目输入
题目输出
提示
样例输入
无。样例输出
本题结果是唯一的,所以不提供输出样例。
C语言解答
#include <stdio.h> #include <stdlib.h> int judge(int i) { int t0=0,t1=0; while(i!=0) { if(i%2) t1++; else t0++; i/=2; } if(t1>t0) return 1; else return 0; } int main(int argc, char *argv[]) { int i,ta=0,tb=0; for(i=1;i<1001;i++) { if(judge(i)) ta++; else tb++; } printf("%d %d\n",ta,tb); system("PAUSE"); return 0; }
C++解答
#include<iostream> using namespace std; int main() { int a=0,b=0; for(int i=1;i<=1000;i++) { int t=i; int ca=0,cb=0; while(t|0) { if(t&1) ca++; else cb++; t>>=1; // cout<<ca<<' '<<cb<<endl; } ca>cb?a++:b++; } cout<<a<<' '<<b<<endl; return 0; }
提示
样例输入
无。
样例输出
本题结果是唯一的,所以不提供输出样例。