您的位置:首页 > 其它

hdu-2502月之数(找规律)

2015-08-27 00:30 211 查看

月之数

Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 7922 Accepted Submission(s): 4681



Problem Description
当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数。

如果一个正整数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
给你一个整数T,表示输入数据的组数,接下来有T行,每行包含一个正整数 n(1<=n<=20)。



Output
对于每个n ,在一行内输出n对应的月之数。



Sample Input
3
1
2
3




Sample Output
1
3
8


题目大意:统计N位二进制数中1的个数
解题思路:有题可知,N位二进制所能表示的2的N-1方个十进制数;例如,三位二进制可表示4(100)、5(101)、6(110)、7(111)四个数;而四位二进制
可表示8(1000)、9(1001)、10(1010)、12(1100)、11(1011)、14(1110)、13(1101)、15(1111)八个数;并且可推出其每个数平均含有的1的个数
为 (N+1)/2个;如N == 3时;共有8个1,则平均每个数含有的1的个数为8 / 4 = 2个,即(3+1)/2;同理,N==4时;共有20个1,则每个数平均含有的1的个数为
20 / 8=2.5;即(4+1)/2;
所以N位二进制数中1的总个数为2^(n-1)*(n+1)/2;
ac代码:
#include<stdio.h>
#include<math.h>
int main()
{
	int t,m,count;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&m);
		count=pow(2,m-1)*(m+1)/2;
		printf("%d\n",count);
		
	}
	return 0;
 }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: