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; }
相关文章推荐
- 如何去掉MyEclipse对JS等文件的验证
- 可以这样去理解group by和聚合函数
- DSO Framer Control Object 操作word文件
- 怎么将linux下的项目转换成windows的VS2010下的项目?
- 效验安装包和脚本的完整性
- ssh到远程主机杀死进程
- 78-WS2812-Library (STM32F4)
- 面试题:查找遗漏的数字
- hdu1530 Maximum Clique(求最大团模板题)
- Http Basic Authentication 的请求头Authorization的状态保存问题:见‘斜粗下划线’部分说明
- stm-ledstrip : Driver and test routine for WS2811 RGB-LED
- 题目:买卖股票的最佳时机 III
- HDU 1251 统计难题-字典树-统计前缀个数
- 如何在VC6.0下用pthread.h这个头文件
- 安全跟踪升级
- 黑马程序员——集合——Map集合
- Android Studio Git初体验
- swift详解之十二-----------------泛型
- C#图片存入数据库及其读出显示
- Communication Patterns