测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A24180. 二进制分类

填空题 中等

题目描述

二进制分类

题目描述

若将一个正整数化为二进制数,在此二进制数中,我们将数字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类数的个数,中间用单个空格隔开。

参考答案

#include<bits/stdc++.h> using namespace std; bool isClassA(int n)//判断数字n是否是A类数 { int s1 = 0, s0 = 0;//s1:1的个数 s0:0的个数 for(int a = n; a > 0; a /= 2)//二进制下数字拆分 除基取余 { if(a % 2 == 1)//如果这一位是1 s1++; else//如果这一位是0 s0++; } return s1 > s0;//如果1比0多,那么是A类数 } int main() { int ctA = 0, ctB = 0;//ctA:A类数个数 ctB:B类数个数 for(int i = 1; i <= 1000; ++i) { if(isClassA(i))//如果i是A类数 ctA++; else//如果i是B类数 ctB++; } cout << ctA << ' ' << ctB; return 0; }
上一题 下一题