题目描述
若将一个正整数化为二进制数,在此二进制数中,我们将数字 11 的个数多于数字 00 的个数的这类二进制数称为 A 类数,否则就称其为 B 类数。
例如:
(13)10=(1101)2(13)10=(1101)2,其中 11 的个数为 33,00 的个数为 11,则称此数为 A 类数;
(10)10=(1010)2(10)10=(1010)2,其中 11 的个数为 22,00 的个数也为 22,称此数为 B 类数;
(24)10=(11000)2(24)10=(11000)2,其中 11 的个数为 22,00 的个数为 33,则称此数为 B 类数;
程序要求:求出 1~n 之中(1≤n≤1000),全部 A,B 两类数的个数。
输入格式
输入 n。
输出格式
一行,包含两个整数,分别是 A 类数和 B 类数的个数,中间用单个空格隔开。
输入输出样例
输入 #1复制
7
输出 #1复制
5 2
#include <iostream>
#include <algorithm>
#include <string>
#include <sstream>
#include <vector>
using namespace std;
bool is(int n){
int k=0,g=0;
while(n){
if(n%2==0){
k++;n/=2;
}
else {
g++;n/=2;
}
}
if(g>k) return true;
else return false;
}
int main()
{
int n,g=0;
cin>>n;
for(int i=1;i<=n;i++){
if(is(i)){g++;}
//
}
cout<<g<<" "<<n-g;
return 0;
}