36:二进制分类

36:二进制分类

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

若将一个正整数化为二进制数,在此二进制数中,我们将数字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类数的个数,中间用单个空格隔开。
样例输入
(无)
样例输出
(不提供)
来源
NOIP1995复赛 普及组 第三题
 1 #include<iostream>
 2 using namespace std;
 3 int alei;
 4 int blei;
 5 int main()
 6 {
 7     for(int i=1;i<=1000;i++)
 8     {
 9         int yi=0;
10         int ling=0;
11         int now=i;//记录i的值 
12         while(now!=0)
13         {
14             int r=now%2;
15             if(r==1)yi++;
16             else if(r==0)ling++;
17             now=now/2;
18         }
19         if(yi>ling)alei++;
20         else blei++;
21     }
22     cout<<alei<<" "<<blei;
23     return 0;
24 }
原文地址:https://www.cnblogs.com/zwfymqz/p/6533198.html