DNA Consensus String UVA - 1368

这个题目做不出来的最大原因在于没有读懂题目什么意思,刚开始的时候感觉挺懵的。其实题目的意思就是:给你几行字符串,让你统计每一列中出现最多的字母(注意按照字典序),所以解决的方法就是枚举,定义一个二维的字符数组,然后两层循环,就出来啦-_-!!不多说,看代码吧~

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;
int main()
{
    int n,len;
    int N;
    string gen[55];
    char TGCA[4];
    cin>>N;
    while(N--)
    {

        cin>>n>>len;
        for(int i=0;i<n;i++)
            cin>>gen[i];
        int tot=0;
        for(int i=0;i<len;i++){
            memset(TGCA,0,sizeof(TGCA));
            for(int j=0;j<n;j++){
                if(gen[j][i]=='T')TGCA[0]++;
                if(gen[j][i]=='G')TGCA[1]++;
                if(gen[j][i]=='C')TGCA[2]++;
                if(gen[j][i]=='A')TGCA[3]++;
            }
//注意>=的作用
            if(TGCA[0]>TGCA[1]&&TGCA[0]>TGCA[2]&&TGCA[0]>TGCA[3]){
                cout<<'T';
                tot+=TGCA[1]+TGCA[2]+TGCA[3];
            }
            if(TGCA[1]>=TGCA[0]&&TGCA[1]>TGCA[2]&&TGCA[1]>TGCA[3]){
                cout<<'G';
                tot+=TGCA[0]+TGCA[2]+TGCA[3];
            }
            if(TGCA[2]>=TGCA[0]&&TGCA[2]>=TGCA[1]&&TGCA[2]>TGCA[3]){
                cout<<'C';
                tot+=TGCA[0]+TGCA[1]+TGCA[3];
            }
            if(TGCA[3]>=TGCA[0]&&TGCA[3]>=TGCA[1]&&TGCA[3]>=TGCA[2]){
                cout<<'A';
                tot+=TGCA[0]+TGCA[1]+TGCA[2];
            }
        }
        cout<<endl;
        cout<<tot<<endl;
    }
    return 0;
}

代码来源:http://www.cnblogs.com/Destiny-Gem/p/3830399.html

posted @ 2017-08-16 10:07  努力更加美好  阅读(191)  评论(0编辑  收藏  举报