hdu-2502月之数(找规律)

来源:互联网 发布:爱普生r230清零软件 编辑:程序博客网 时间:2024/05/17 03:13

月之数

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
3123
 

Sample Output
138
 题目大意:统计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; } 


0 0
原创粉丝点击