首先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;
}