题目大意:
给出 N、B、D,要求找出 N 个由0或1组成的编码(1 <= N <= 64),每个编码有 B 位(1 <= B <= 8),使得两两编码之间至少有 D 个单位的“Hamming距离”(1 <= D <= 7)。“Hamming距离”是指对于两个编码,他们二进制表示法中的不同二进制位的数目。
思路:
从0开始从小到大暴力枚举,每个数都与其他已确定的数进行比较,若比较结果全部符合“Hamming距离”不小于B,则存储进arry[]内。如此反复,直至找出N个数为止。
代码:
/* ID: lujunda1 LANG: C++ PROG: hamming */ #include#include using namespace std; int N,B,D; int sum,arry[300]; int dif(int a,int b) //求出a、b之间的“Hamming距离”。 { int s=0; for(int i=0;i>i)%2-(b>>i)%2) s++; return s; } void check(int n) //对于n,将其与其它已确定的数进行比较,检查其“Hamming距离”是否都不小于D。 { for(int i=0;i