2173: 计算好数

内存限制:128 MB 时间限制:1.000 S
评测方式:文本比较 命题人:
提交:15 解决:7

题目描述

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

例如:

(13)10 = (1101)2,其中1的个数为3,0的个数为1,则此数是好数;

(10)10 = (1010)2,其中1的个数为2,0的个数也为2,则此数不是好数;

(24)10 = (11000)2,其中1的个数为2,0的个数为3,则此数不是好数;

对于给定的N,写程序求出1~N之中(包括1与N)中的好数个数。

输入

一个整数,题目中的N(N ≤ 1000)

输出

一个整数,表示1~N之中(包括1与N)中的好数个数。

样例输入 复制

10

样例输出 复制

5

提示

#include<bits/stdc++.h>
using namespace std;

int main(){
    int n,ans=0;
    cin>>n;
    for (int i=1;i<=n;i++) {
    	int m=i,cnt0=0,cnt1=0;
    	while (m>0) {
    		if (m%2==1)
    		    cnt1++;
    		else
    		    cnt0++;
			m/=2; 
		}
		if (cnt1>cnt0)
		    ans++;
	}
	cout<<ans;
	return 0;
}