首先0在num[]中,然后枚举和已经加入num[]的数比较,如果符合,就加进集合中。
/*
ID:Ryan
PROG:hamming
LANG:C++
*/
#include
<iostream>
#include
<fstream>
using namespace std;
int num[65];
int n,b,d;
int cnt=1;
void check(int t)
{   
int i,j;
    
int k;
    
bool can=1;
    
for(i=1;i<=cnt;i++)//对每一个加进集合的数进行比较 
    {   k=0;
        
for(j=0;j<b;j++)//如果距离<d,排除 
        { 
            
if(t&(1<<j)^(num[i]&(1<<j)))
                k
++
        }
        
if(k<d)
        {   can
=0;
            
break;
        } 
    }
    
if(can==1)//如果符合情况,加进去 
        num[++cnt]=t;
    
return ;
}
int main()
{   ifstream fin(
"hamming.in");
    ofstream fout(
"hamming.out");
    
int q,j;
    fin
>>n>>b>>d;
    num[cnt]
=0;
    
for(q=1;q<(1<<b);q++)
    {
        check(q);
        
if(cnt==n)
            
break;
    }
    
for(j=1;j<cnt;j++)
    {   
if(j%10==0)
            fout
<<num[j]<<endl;
        
else  fout<<num[j]<<" ";
    }
    fout
<<num[j]<<endl;
    
//system("pause");
    return 0;
}