简单题,感觉很久没做过这么简单的题了。最小的数肯定是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 }

浙公网安备 33010602011771号