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

浙公网安备 33010602011771号