题解
这道题比较简单,就是暴力遍历,一个个试就可以了。
海明距离就是简单的位运算 异或一下就出来了。
代码也比较清晰了不解释。
代码
#include <iostream>
#include <cstdio>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
int n,m,b,d;
int cot[70],ans[65];
int s=0;
int cal_dis(int x,int y){
int c,ox;
c = 0;
ox= x^y;
for(int i=0;i<b;i++){
if(ox%2 == 1) c++;
ox/=2;
}
return c;
}
bool compact(int num){
for(int i=0;i<s;i++){
if( cal_dis(num,ans[i]) < d){
return false;
}
}
return true;
}
void dfs(int cur_num){
if(s==n) {
for(int i=0,nn=1;i<s;i++){
cout<<ans[i];
if(nn%10 == 0) cout<<endl;
else{
if(i!=s-1) cout<<" ";
else cout<<endl;
}
nn++;
}
exit(0);// 直接结束
}
for(int i = cur_num; i<=256 ; i++){
if( compact(i) ){
ans[s++] = i;
dfs(i+1);
s--;
}
}
}
int main(void){
cin>>n>>b>>d;
dfs(0);
return 0;
}