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; }