Problem : 0-1计数
Description
设有1,2,3,…, n共n个整数(2≤n≤1000),将这n个整数全部化成二进制。
例如,当n=9时,其1-9个整数及它们所对应的二进制数如下:
整数 1 2 3 4 5 6 7 8 9
二进制数 1 10 11 100 101 110 111 1000 1001
这些二进制数可以分成二类:
A类数:该数的二进制表示中的0的个数≥1的个数,如2,4,8,9。
B类数:该数的二进制表示中的0的个数<1的个数,如1,3,5,6,7
问题 当n给出之后,统计出A类数的个数
Input
一个整数N
Output
一个整数
Sample Input
9
Sample Output
4
#include <bits/stdc++.h>
using namespace std;
bool pd(int n)
{ stack<int>s;
int p=0,t=0;
while(n>=1)
{
s.push(n%2);
n/=2;
}
while(!s.empty())
{
if(s.top()==0)p++;
if(s.top()==1)t++;
s.pop();
}
if(p>=t)return true;
else return false;
}
int main()
{
int n,f=0;cin>>n;
for(int i=2;i<=n;i++)
if(pd(i)==true)f++;
cout<<f<<endl;
return 0;
}