【二進制處理】洛谷P1461_海明碼 Hamming Codes

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;
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章