2311 - 二进制数问题

若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进制数称为A类数,否则就称其为B类数。

例如:

1310=11012

        其中1的个数为30的个数为1,则称此数为A类数;

1010=10102

        其中1的个数为20的个数也为2,称此数为B类数;

2410=110002

        其中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;
}

提示

样例输入

无。

样例输出

本题结果是唯一的,所以不提供输出样例。
时间限制 1 秒
内存限制 125 MB
讨论 统计
上一题 下一题