题意:输入m个长度均为n的DNA序列,求一个DNA序列,到所有序列的总的Hamming距离尽量小。两个等长字符串 的Hamming距离等于字符不同的位置个数。
输入:m(4<=m<=50) , n(4<=n<=1000),以及m个长度均为n的DNA序列
输出:m个序列的Hamming距离和最小的DNA序列和对应的距离。如有多解,要求为字典序最小的解。
字符串题,千万不要忘记在要输出的字符串后加'\0'
#include<stdio.h>
#include<string.h>
#include<map>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
char s[55][1100];
char x[1100];
int m,n,sum=0;
scanf("%d%d",&m,&n);
int i,j,k;
for(i = 0; i < m; i ++)
scanf("%s",s[i]);
map<char,int>q;
map<char,int>::iterator it;
for(i = 0; i < n; i ++)
{
q['A'] = 0;
q['C'] = 0;
q['G'] = 0;
q['T'] = 0;
for( j = 0; j < m; j ++)
{
q[s[j][i]]++;
}
int maxx = 0;
for(it = q.begin(); it != q.end(); it++)
{
if(maxx < (*it).second)
{
maxx = (*it).second;
x[i] = (*it).first;
}
}
sum += m-maxx;
}
x[n]='\0';//
printf("%s\n",x);
printf("%d\n",sum);
}
return 0;
}