参考思路:http://www.cnblogs.com/huachiwoo/archive/2011/05/03/2034999.html
求汉明距离:http://www.cnblogs.com/huachiwoo/archive/2011/05/02/2034158.html
http://www.cnblogs.com/huachiwoo/archive/2011/05/01/2034155.html
注意异或操作符 ^
以及右移位 >>
/*
ID: wangxin12
PROG: hamming
LANG: C++
*/
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
using namespace std;
int N, B, D;
vector<int> result;
int Power(int index) {
if(index == 1) return 2;
return 2 * Power(index - 1);
}
bool check(int i) {
for(int k = 0; k < result.size(); k++) {
int dis = 0;
int c = i ^ result[k]; //异或 XOR
while(c) {
dis += c & 0x01; //dis += c & 0x01;
c >>= 1;
/* //another方法
c &= (c-1);
dis++; */
}
if(dis < D) return false;
}
return true;
}
int main() {
//input
ifstream fin("hamming.in");
fin>>N>>B>>D;
fin.close();
result.push_back(0);
//calculate
for(int i = 1; i <= Power(B) - 1; i++) {
if(result.size() < N) {
if(check(i)) result.push_back(i);
}
else break;
}
//Output
ofstream fout("hamming.out");
for(int j = 0; j < result.size(); j++) {
if(j == result.size() - 1) {
fout<<result[j]<<endl;
continue;
}
if(j % 10 == 9) fout<<result[j]<<endl;
else fout<<result[j]<<" ";
}
fout.close();
return 0;
}