UVA-455-DNA共识串

-UVA-455 **DNA共识串**

解题思路:只要你的答案串与样例所给差距最小,并且是字典序输出即可,本题关键在于一个一个输出,遍历 列 再遍历 行。在这里插片描述
样例输入
3
5 8
TATGATAC
TAAGCTAC
AAAGATCC
TGAGATAC
TAAGATGT
4 10
ACGTACGTAC
CCGTACGTAG
GCGTACGTAT
TCGTACGTAA
6 10
ATGTTACCAT
AAGTTACGAT
AACAAAGCAA
AAGTTACCTT
AAGTTACCAA
TACTTACCAA
样例输出
TAAGATAC
7
ACGTACGTAA
6
AAGTTACCAA
12

代码示例

int main()
{
string gene[55];
int n;
cin>>n;//3
for(int i=0; i<n; i++)
{
// memset(gene,0,sizeof(gene));//这么写问题很大,你怎么能让一串数组=0??应该一个个等于

    int s[4];
    int num=0;
    int hang,len;
    cin>>hang>>len;//5,8

    //printf("hangshu=%d,lieshu=%d\n",hang,len);
    //printf("gene[0]=%s\n",s);

    for(int j=0; j<hang; j++)//5
    {
        cin>>gene[j];

    }
    for(int k=0; k<len; k++)//遍历列!!!,竖直遍历
    {
        int A,G,C,T=0;
        A=0;
        G=0;
        C=0;
        T=0;
        memset(s,0,sizeof(s));

        for(int m=0; m<4; m++)
        {
            s[m]=0;


        }
        for(int j=0; j<hang; j++)//5
        {
            if(gene[j][k]=='A')//竖直遍历,挨个输出
            {
                s[0]++;

                A=s[0];
            }
            else if(gene[j][k]=='G')
            {
                s[1]++;
                G=s[1];



            }
            else if(gene[j][k]=='C')
            {
                s[2]++;
                C=s[2];
                // printf("s[2]=%d\n\n",s[2]);

            }
            else if(gene[j][k]=='T')
            {
                s[3]++;
                T=s[3];
                // printf("s[3]=%d\n\n",s[3]);

            }
            //printf("%d  %d  %d  %d\n",A,G,C,T);

        }
        //printf("num=%d\n",num);
        // printf("A=%d,G=%d,C=%d,T=%d",A,G,C,T);

        if(A>=G&&A>=C&&A>=T)//观察是否有等于号,可以形成字典序输出
        {
            printf("A");
            //printf("num=%d\n",num);
            num+=G+C+T;
            //printf("num=%d\n",num);

        }
        else if(G>A&&G>C&&G>=T)
        {
            // printf("s[0]=%d,s[1]=%d,s[2]=%d,s[3]=%d\n",s[0],s[1],s[2],s[3]);
            printf("G");
            num+=A+C+T;
        }
        else if(C>A&&C>=G&&C>=T)
        {
            printf("C");
            num+=A+G+T;
        }
        else if(T>A&&T>G&&T>C)
        {
            printf("T");
            num+=A+G+C;
        }
    }
    cout<<endl;
    cout<<num<<endl;
    num=0;
    //memset(gene,0,sizeof(gene));

}

}
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值