题目求距离和最小的DNA序列以及输出最小距离,按列遍历输出每列中出现次数最大的字母即可,若出现次数输出字典序最小的解,由于ascll码直接是按顺序排列的所以将他们以ascll码值为下标装入数组即可,题目还是很简单代码如下
#include<iostream>
#include<cstring>
using namespace std;
int a[100];
char str[60][1010];
int m=0,n=0,T=0,sum=0;
int finmax() {
int maxa=0,idx=0;
for(int i='A'; i<='T'; i++) {
if(a[i]==0)
continue;
if(a[i]>maxa){
maxa=a[i];
idx=i;
}
}
sum+=m-maxa;//每列距离和等于行数-出现次数最高的字母次数
return idx;//返回每列出现次数最大的ascll码
}
int main() {
cin>>T;
while(T--) {
sum=0;//每个输入开始对sum初始化
cin>>m>>n;
for(int i=0; i<m; i++) {
for(int j=0; j<n; j++) {
cin>>str[i][j];
}
}
//cout<<endl;
for(int j=0; j<n; j++) {
memset(a,0,sizeof(a));
for(int i=0; i<m; i++) {
if(str[i][j]=='A')
a['A']++;
if(str[i][j]=='C')
a['C']++;
if(str[i][j]=='G')
a['G']++;
if(str[i][j]=='T')
a['T']++;
}
int num=finmax();
printf("%c",num);
}
cout<<endl<<sum<<endl;
}
return 0;
}