题目描述 Description
寒月正在学习二进制数。如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数。所有的n二进制数中,1的总个数被称为n对应的月之数。例如,3二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),他们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8。
输入描述 Input Description
第一行为一个整数t(≤10),表示数据组数;接下来每行包含一个正整数n(n≤50)。
输出描述 Output Description
对于每组数据,输出n对应的月之数。
样例输入 Sample Input
3
1
2
3
样例输出 Sample Output
1
3
8
评价:这个题虽然是钻石级的,但是挺水。。。
题解:其实这个题一看就是组合数学,稍加分析后即可得出:对于一个数n,则n位的月之数就是c(i,j)*k (i=n-1;
0<=j<=n-1;k=j+1);
然后暴力求出即可。。。
#include<iostream>
using namespace std;
long long n,t;
long long a[51],ans;
long long zuhe( long long n, long long m )
{
long long res = 1;
for( long long i = 0; i < m; ++i )
{
res *= ( n - i );
res /= ( i + 1 );
}
return res;
}
int main()
{
cin>>t;
for (int i=1;i<=t;i++)
{
cin>>n;
ans=0;
for (int i=0;i<=n-1;i++)
{
ans=ans+zuhe(n-1,i)*(i+1);
}
cout<<ans<<endl;
}
}