题意:
给出很多DNA序列,每个长度一样;让你找出一个序列,与这些序列相差最小,最小相差多少;
思路:
就是取所有串第一位中出现最多的,作为结果的第一位,并算出不是这个字母的有几个..一直推到最后一位;
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char dna[55][1005];
char ans[1005];
int res;
int m,n;
int cnta,cntt,cntc,cntg;
int main() {
int t;
scanf("%d",&t);
while(t--) {
scanf("%d%d",&m,&n);
for(int i = 0; i < m; i++) {
scanf("%s",dna[i]);
}
res = 0;
for(int i = 0; i < n; i++) {
cnta = cntt = cntc = cntg = 0;
for(int j = 0; j < m; j++) {
if(dna[j][i] == 'A')
cnta++;
if(dna[j][i] == 'T')
cntt++;
if(dna[j][i] == 'C')
cntc++;
if(dna[j][i] == 'G')
cntg++;
}
int temp;
temp = max(cnta , max(cntt , max (cntc , cntg)));
if(temp == cnta) {
ans[i] = 'A';
res += m - cnta;
continue;
}
if(temp == cntc) {
ans[i] = 'C';
res += m - cntc;
continue;
}
if(temp == cntg) {
ans[i] = 'G';
res += m - cntg;
continue;
}
if(temp == cntt) {
ans[i] = 'T';
res += m - cntt;
continue;
}
}
ans[n] = '\0';
printf("%s\n%d\n",ans,res);
}
}