这是道水题
%s 输出是从第一个位置开始读, 遇'0'结束!
所以在存str 是 j-1 , 而不是j
#include<stdio.h>
#include<string.h>
int main(){
int n, m, t;
char maps[55][1005];
char str[1005], ch[5] = { '0', 'A', 'C', 'G', 'T'};
int num[6], k, max, coun;
while(scanf("%d",&t) != EOF){
while(t--){
scanf("%d%d",&n, &m);
memset(str,'\0',sizeof(str));
for(int i = 1; i <= n; i++){
scanf("%s",&maps[i][1]);
}
coun = 0;
for(int j = 1; j <= m; j++){ // 按列查找
memset(num,0,sizeof(num));
// 记录每个字母出现次数
for(int i = 1; i <= n; i++){
if(maps[i][j] == 'A') num[1]++;
else if(maps[i][j] == 'C') num[2]++;
else if(maps[i][j] == 'G') num[3]++;
else if(maps[i][j] == 'T') num[4]++;
}
max = 0; k = 0;
//记录出现次数最多的字母(即是按字典序列)
for(int i = 1; i <= 4; i ++)
if(max < num[i]) {
max = num[i];
k = i;
}
str[j-1] = ch[k];
for(int i = 1; i <= n; i++){
if(str[j-1] != maps[i][j]) coun++;
}
}
printf("%s\n",str);
printf("%d\n",coun);
}
}
return 0;
}
Sample Input
3 5 8 TATGATAC TAAGCTAC AAAGATCC TGAGATAC TAAGATGT 4 10 ACGTACGTAC CCGTACGTAG GCGTACGTAT TCGTACGTAA 6 10 ATGTTACCAT AAGTTACGAT AACAAAGCAA AAGTTACCTT AAGTTACCAA TACTTACCAA
Sample Output
TAAGATAC 7 ACGTACGTAA 6 AAGTTACCAA 12