UVA 1368 DNA Consensus String

题意:先输入一个数代表接下来的输入数据的个数,然后输入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<m;i++)
         {
             scanf("%s",&str[i]);
         }
         diff=0;
//         printf("print:\n");
//         for(i=0;i<m;i++)
//         {
//             printf("%s\n",str[i]);
//         }
         memset(resStr,'\0',sizeof(resStr));//刚刚忘了写这个就WA
         for(i=0;i<n;i++)
         {
              numA=0,numC=0,numG=0,numT=0,max=0;
             for(j=0;j<m;j++)
             {
                 switch (str[j][i])
                 {
                 case 'A':
                    numA++;
                    break;
                 case 'C':
                    numC++;
                    break;
                 case 'G':
                    numG++;
                    break;
                 case 'T':
                    numT++;
                    break;
                 }
             }
             curDiff=0;
            if(numA>=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;
}

复制代码

 

posted @   付玬熙  阅读(101)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
主题色彩