YCOJ二进制数问题

题目:

Description

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

例如:
	
	13=1101
    
    其中1的个数为3,0的个数为1,则称此数为A类数;
	
	10=1010
    
    其中1的个数为2,0的个数也为2,称此数为B类数;
	
	24=11000
   
   其中1的个数为2,0的个数为3,则称此数为B类数;

程序要求:

求出1~n之中(包括1与n),全部A、B两类数的个数。(其中n<=1000)


Input

输入一行一个数n


Output

在一行中输出两个整数A和B,A表示A类数的个数,B表示B类数的个数,AB之间由一个空格分隔,除此之外不要再输出其他多余的东西。


Sample Input 1 

1000
Sample Output 1

538 462
Hint

提示:可以借助函数,将逻辑简化

Source
NOIP1995

思路
这道题不是很难,就写一个自定义函数就可以几乎把所有事情都解决了,但你也可以不写自定义函数,直接在main函数里实现,但我个人认为写自定义函数思路会清晰一点。

所以,我就用自定义函数的做法来为大家讲解这道题。qwq

自定义函数要做哪些事情呢?那当然有让10进制转成2进制,还有判断这个数里面是0多还是1多。
所以函数就可以开始写了:

bool qwq(int x){
	int a=
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值