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