Problem:
http://ace.delos.com/usacoprob2?a=GDaP3qeGiYp&S=hamming
My Answer:
/*
ID:iby071
LANG:C++
TASK:hamming
*/
#include<iostream>
#include<fstream>
using namespace std;
int n,b,d;
int hamming(unsigned long int x,long int y)
{ unsigned long int tmp=x^y,cnt=0; //^:异或
for(int i=0;i<b;++i)
cnt+=(tmp>>i)&1; //取从右往左第i+1位
return cnt;
}
int main()
{ ifstream fin("hamming.in");
ofstream fout("hamming.out");
int cnt=0,j;
unsigned long int a[65];
fin>>n>>b>>d;
a[0]=0;
++cnt;
for(unsigned long int i=1;i<(1<<b);++i) //1<<b即2的b次方
{ for(j=0;j<cnt;++j)
if(hamming(i,a[j])<d) break;
if(j==cnt) {a[cnt]=i;++cnt;}
if(cnt==n) break;
}
fout<<a[0];
for(int i=1;i<n;++i)
{ if(i%10==0) fout<<endl; //注意:要求输出为10个一行
else fout<<' ';
fout<<a[i];
}
fout<<endl;
return 0;
}