HDU4349-Xiao Ming's Hope-找规律

打表输出前100之后,找到规律。

不过正确规律是1<<(二进制中1的个数)。

 1 #include <cstdio>
 2 #include <algorithm>
 3 
 4 using namespace std;
 5 
 6 
 7 int C[100][100];
 8 
 9 void pnt_bit(int x)
10 {
11     int cnt = 0,flag = 0;
12     int bit = 0;
13     while(x)
14     {
15         if(x&1) {flag = 1;}
16         else {if(flag) cnt++;}
17         x>>=1;
18         bit++;
19     }
20     printf("%d
",(1<<bit)/(1<<(cnt+1)));
21 }
22 
23 void init()
24 {
25     C[0][0] = C[1][1] = C[1][0] = 1;
26     int cnt = 0;
27     for(int i=2;i<100;i++)
28     {
29         C[i][0] = C[i][i] = 1;
30         cnt = 2;
31         for(int j=1;j<i;j++)
32         {
33             C[i][j] = C[i-1][j-1]+C[i-1][j];
34             if(C[i][j]&1) cnt++;
35         }
36 
37         pnt_bit(i+1);
38         printf(" lev:%d cnt:%d
",i+1,cnt);
39     }
40 }
41 
42 int n;
43 
44 int main()
45 {
46     //init();
47     while(~scanf("%d",&n))
48     {
49         pnt_bit(n+1);
50     }
51 }
原文地址:https://www.cnblogs.com/helica/p/5229294.html