简单题,感觉很久没做过这么简单的题了。最小的数肯定是0,接下来枚举就行了。下面贴出代码,以作纪念。

View Code
 1 /*{
 2 ID:jzy3209981
 3 PROG:hamming
 4 LANG:C++
 5 }*/
 6 #include<stdio.h>
 7 #include<iostream>
 8 #include<string.h>
 9 #include<math.h>
10 using namespace std;
11 
12 int bitnum(int n)
13 {
14     int i=0;
15     while(n!=0)
16     {
17         n&=(n-1);
18         i++;
19     }
20     return i;
21 }
22 int code[64];
23 int main()
24 {
25     freopen ("hamming.in","r",stdin);
26     freopen ("hamming.out","w",stdout);
27     int n,b,d,i,j=1,k;
28     scanf("%d%d%d",&n,&b,&d);
29     for(i=1;i<(1<<b);i++)
30     {
31         for(k=0;k<j;k++)
32         {
33             if(bitnum(i^code[k])<d)
34                 break;
35         }
36         if(k>=j)
37         {
38             code[j]=i;
39             j++;
40         }
41     }
42     for(i=0;i<n;i++)
43     {
44         if(i!=n-1&&i%10!=9)
45             printf("%d ",code[i]);
46         else 
47             printf("%d\n",code[i]);
48     }
49     return 0;
50 }

 

posted on 2012-07-22 10:26  醉春雨  阅读(160)  评论(0)    收藏  举报