d.汉明距离是使用在数据传输差错控制编码里面的,汉明距离是一个概念,它表示两个(相同长度)字对应位不同的数量,
我们以d(x,y)表示两个字x,y之间的汉明距离。对两个字符串进行异或运算,并统计结果为1的个数,那么这个数就是汉明距离。
给出N个串,求出其中最小的汉明距离(其中某2个串的汉明距离是最小的)。
s.随机数法。。。
c.能不能过,看脸。。。
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
using namespace std; int main(){ //cout<<RAND_MAX<<endl;// int T;
int N;
char str[][];
int num[];
int i;
int j;
int mi;
int fuck;
int shit;
int tmp;
int sum; scanf("%d",&T); while(T--){
scanf("%d",&N);
for(i=;i<N;++i){
scanf("%s",str[i]);
} memset(num,,sizeof(num));
for(i=;i<N;++i){
for(j=;j<;++j){
if(''<=str[i][j]&&str[i][j]<=''){
num[i]=(num[i]<<)+(str[i][j]-'');
}
else{
num[i]=(num[i]<<)+(+str[i][j]-'A');
}
}
} mi=;
srand(time(NULL));
for(i=;i<;++i){
fuck=(rand()*rand())%N;//这是个看脸的代码。。。
shit=(rand()*rand())%N; if(fuck==shit){
continue;
}
tmp=num[fuck]^num[shit];
sum=;
while(tmp>){
sum=sum+(tmp&);
tmp>>=;
}
if(sum<mi){
mi=sum;
}
} printf("%d\n",mi); } return ;
}