打表输出前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 }