题目:
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=