题意:找规律,发现每一行奇数的个数其实是该行号二进制表示中1的数量
感谢浩神 感谢hmgg提供的思路 其实貌似找两个规律就能找到了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define ll long long
#define inf 0x3f3f3f3f
#define MID (t[k].l+t[k].r)>>1
#define cl(a,b) memset(a,b,sizeof(a))
using namespace std;
int getnum(int n){
int ans=0;
while(n){
if(n&1){
ans++;
}
n>>=1;
}
return ans;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
int num=getnum(n);
printf("%d\n",(int)pow(2,num));
}
return 0;
}
描述
HWJ学长十分热爱数字,尤其是奇数。作为单身狗的HWJ更喜欢奇数,讨厌成双成对的存在。马上2019.10.1就要来了,大家都和自己的女(男)朋友准备好出去逛街…HWJ学长只能自己在宿舍静静的学习。偶然间,他看到一个问题:“
Cn0+Cn1+Cn2+…+Cnn=?C _{n}^{0}+C _{n}^{1}+C _{n}^{2}+…+C _{n}^{n} = ?
C
n
0
+C
n
1
+C
n
2
+…+C
n
n
=?”。HWJ学长当然知道这个问题的答案,但是他想知道这里面有多少个奇数。当
n=1n=1
n=1时,
C10=C11=1C_{1}{0}=C_{1}{1}=1
C
1
0
=C
1
1
=1,一共两个奇数…突然一个女生看到他在数其中奇数的个数,他想借此展示自己过人的数学天赋,于是写下几个大数
nn
n,但是却发现自己根本求不出来。弱小可怜又无助的HWJ学长来想你求助,想你能写一个程序来帮助他求得答案。
输入
每一行包括一个数字
n(1≤n≤1e9)n(1≤n≤1e^{9})
n(1≤n≤1e
9
)。多组样例输入,样例个数不会超过
1e31e^3
1e
3
输出
输出
Cn0,Cn1,Cn2,…,CnnC _{n}^{0},C _{n}^{1},C _{n}^{2},…,C _{n}^{n}
C
n
0
,C
n
1
,C
n
2
,…,C
n
n
中所有奇数的个数。
输入样例 1
1
2
11
输出样例 1
2
2
8