题目链接:点击打开链接
本来以为是输出其中一个,原来是输出新组合的,英语是硬伤
#include <stdio.h> #include <string.h> #define MAXL 1000 int findmin(int z[]); int main() { int T,z[4]; char str[50][MAXL+1]; //printf("%d",sizeof(z)); scanf("%d", &T); while(T--) { int m, n, i, j, k = 0; char last[MAXL+1] = {'\0'}; //memset(last, '\0', sizeof(last)); memset(str, '\0', sizeof(str)); scanf("%d %d",&m, &n);getchar(); for(i= 0; i < m; i++) for(j = 0; j < n; j++) {str[i][j] = getchar();if(j == n - 1) getchar();} /*for(i= 0; i < m; i++) for(j = 0; j < n; j++) {printf("%c ",str[i][j]);}*/ for(j = 0; j < n; j++) { memset(z, 0, sizeof(z)); for(i = 0; i < m; i++) { switch(str[i][j]) { case 'A':z[0]++;break; case 'C':z[1]++;break; case 'G':z[2]++;break; case 'T':z[3]++;break; } } switch(findmin(z)) { case 0: last[j] = 'A'; k += m-z[0];break;//ÌâÄ¿Òª¶Á¶®£¬Ó¢ÓïÊÇÓ²ÉË case 1: last[j] = 'C'; k += m-z[1];break; case 2: last[j] = 'G'; k += m-z[2];break; case 3: last[j] = 'T'; k += m-z[3];break; } } for(i = 0; last[i] != '\0'; i++) printf("%c",last[i]); printf("\n%d\n",k); } return 0; } int findmin(int z[]) { int i = 0; if(z[i] < z[1]) i = 1; if(z[i] < z[2]) i = 2; if(z[i] < z[3]) i = 3; return i; }