Link
這題暴力枚舉即可,其實就是個二進制處理
#include<cstdio>
int n,k,d,tj,ans[101];
bool PD(int a,int b){
int c=a^b,e=0,js=8; //c=a 異或 b,所以c的每一位如果是1,代表a和b的那一位是不相同的,如果是0,則相同
//e:統計a和b不同的位數有多少,js輪8位
while(js>0){ //逐位判斷
if((c%2)==1) e++; //同上
c>>=1; //這一條==c/=2;
js--;
}
return e>=d; //返回判斷結果
}
int main(){
scanf("%d%d%d",&n,&k,&d); //讀入,b沒卵用我用一個k隨便代替一下
k=-1; //初始
for(int i=1;i<=n;++i){
while(1){ //尋找下一個海明碼
++k; //海明碼指針+1
bool pd=1; //先把它置爲合法
for(int j=1;j<i;++j)
if(PD(ans[j],k)==0) //如果它不合法
{pd=0;break;} //標記彈出
if(pd==1) break; //彈出
}
printf("%d ",k); //輸出
ans[i]=k; //存
++tj;
if(tj==10){ //注意輸出是一行10個
printf("\n");
tj=0;
}
}
}