2143 - Good Number

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

这一天Tom看到了自己的女神,觉得自己不应该再堕落了,于是他决定奋发图强,整天泡在图书馆里面。他在图书馆的某一个角落里面发现了一本武林秘籍,收好之后回到宿舍,开始研究这本武林秘籍,其实这本武林秘籍就是一本关于计算机的书,发现了神奇的二进制如果一个整数m表示成二进制的时候,它的位数是NTom把所有N位的二进制数中出现1的总和称为Good Number,例如N=3,共有4Good Number ,分别是4100)、5101)、6110)、7111),1的个数是1+2+2+3=8,所以Good Number就是8

题目输入

第一列输入整数T代表有T组测试数据。

每组测试数据第一行个给你一个N(1<=N<=20)

题目输出

每组测试数据结果占一行,输出给出N位二进制数中的Good Number

输入/输出样例

输入格式

3
1
2
3

输出格式

1
3
8

C语言解答

#include<stdio.h>
#include<math.h>
long long jc(int n)
{
	long long result;
	int i;
	for(i=1,result=1;i<=n;i++)
	result*=i;
	return result;
}
main()
{
	long long sum;
	int n,m,i;
	scanf("%d",&n);
	while(n--)
	{
		scanf("%d",&m);
		sum=0;
		for(int i=1;i<=m-1;i++)
		sum+=(i+1)*(jc(m-1)/(jc(m-1-i)*jc(i)));
		printf("%lld\n",sum+1);
	}
}

C++解答

#include <stdio.h>
int main()
{
	int t , num[22] , base = 1 ,i ,n;
	scanf("%d",&t);
	num[1] = 1;
	for(i = 2 ; i<= 20 ; i++)
	{
		num[i] = 2 * num[i - 1] + base ;
		base <<= 1 ;
	}
	while(t--)
	{
		scanf("%d",&n);
		printf("%d\n",num[n]);
	}
	return 0;
}