2311 - 二进制数问题
时间限制 : 1 秒
内存限制 : 125 MB
若将一个正整数化为二进制数,在此二进制数中,我们将数字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; }
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()