1 /*月之数 2 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) 3 Total Submission(s) : 1 Accepted Submission(s) : 1 4 Font: Times New Roman | Verdana | Georgia 5 Font Size: ← → 6 Problem Description 7 当寒月还在读大一的时候,他在一本武林秘籍中(据后来考证,估计是计算机基础,狂汗-ing),发现了神奇的二进制数。 8 如果一个正整数m表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数。所有的n二进制数中,1的总个数被称为n对应的月之数。 9 例如,3二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),他们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8。 10 11 Input 12 给你一个整数T,表示输入数据的组数,接下来有T行,每行包含一个正整数 n(1<=n<=20)。 13 14 Output 15 对于每个n ,在一行内输出n对应的月之数。 16 17 Sample Input 18 3 19 1 20 2 21 3 22 23 Sample Output 24 1 25 3 26 8 27 */ 28 #include<stdio.h> 29 int main() 30 { 31 int T; 32 scanf("%d",&T); 33 while(T--) 34 { 35 int s[21] , i , c[21] , n , p=1 , m; 36 scanf("%d",&n); 37 s[0] = 1; 38 if(n == 1 ) 39 { 40 printf("%d\n",s[n-1]); 41 continue; 42 } 43 int sum =s[0]; 44 for(i = 1 ;i < n;i++) 45 { 46 s[i]=sum+p*2; 47 sum=0; 48 for(m=0;m<=i;m++) 49 { 50 sum=sum+s[m]; 51 } 52 p*=2; 53 } 54 printf("%d\n",s[n-1]); 55 } 56 return 0; 57 }