题意:先输入一个数代表接下来的输入数据的个数,然后输入m,n,表示有m个长度为n的字符串DNA序列。
要求输出:①使m个序列的hamming差最小的DNA序列
②输出m的序列的hamming总差值。
思路:①字符串输出:例如ATC,AGC,GCT,按需查找每个序列的相同位置的元素,
AAG,可得A出现是次数最多,第一个位置应该填A,
TGC,三个元素次数一样,按字典序输出,第二个位置为C,
CCT,可得第三个位置为C。
②hamming差值结果:第一个位置选A,则有2个元素不一样,hamming差值加2,
最后输出总的结果。
#include "stdio.h" #include "stdlib.h" #include "string.h" int main() { int num,m,n,i,j,k,max,diff=0; int numA,numC,numG,numT,curDiff; char str[50][1000],c,resStr[1000]; scanf("%d",&num); while(num--) { scanf("%d",&m); scanf("%d",&n); for(i=0;i=numC&&numA>=numG&&numA>=numT) { resStr[i]='A'; curDiff=numC+numG+numT; } else if(numC>=numG&&numC>=numT) { resStr[i]='C'; curDiff=numA+numG+numT; } else if(numG>=numT)//numG>numA&&numG>numC { resStr[i]='G'; curDiff=numA+numC+numT; } else { resStr[i]='T'; // curDiff=numA+numG+numC; } diff=diff+curDiff; } printf("%s\n",resStr); printf("%d\n",diff); } return 0; }