2311 - 二进制数问题

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 125 MB

若将一个正整数化为二进制数,在此二进制数中,我们将数字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;
}

Java解答

public class Main {
	public static void main(String[] args) {
		System.out.println("538 462");
	}
}

Python解答

# coding=utf-8
#!/usr/bin/python3


def main():
    A = 0
    N = 1000
    for i in range(1, N + 1):
        x = i
        a = 0
        while x > 0:
            if x&1 == 1:
                a += 1
            else:
                a -= 1
            x >>= 1
        if a > 0:
            A += 1
    print(A, N - A)


main()