《ACM程序设计》短学期考试_软件工程及其他专业
题目大意:给你一个N,求N位的全部二进制数中的所有1有多少个。
思路:考虑3和4。N为的全部二进制数总共有x = 2^(N-1)个。第1竖列总共有x个1,
之后的第2~N竖列总共有x/2个1。所以结果ans = x + (N-1)*x/2。参考讨论区。
N = 3: N = 4:
100 1000
101 1001
110 1010
111 1011
1100
1101
1110
1111
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int x,N,T;
cin >> T;
while(T--)
{
cin >> N;
x = 1;
for(int i = 1; i < N; ++i)
x *= 2;
int sum = x + (N-1)*x/2;
cout << sum << endl;
}
return 0;
}
原文:http://blog.csdn.net/lianai911/article/details/43340759