不存在的好吧 2021-08-06 16:34
浏览 9
已结题

uva1368 wa了,想知道错哪了,求告诉下


#include<iostream>
#include<string.h>
#include<math.h>
using namespace std;
int m,n; //m为dna序列的个数,n为dna序列的长度
const int maxlength=1000;
/*
思路:既然是总Hanmming距离最小,
那么就字符串的每个字符与其他DNA序列的Hamming距离尽量小
*/
int MAX(int a,int b,int c,int d)
{
    int temp;
    temp=max(a,b);
    temp=max(temp,c);
    temp=max(temp,d);
    return temp;
}
int main()
{
    int T; //测试样例个数
    cin>>T;
    while(T--)
    {
        cin>>m>>n;//输入m,n;
        string dna[m];
        string ans;
        int count=0; //错误的个数
        for(int i=0;i<m;i++)
        {
            cin>>dna[i];
        }
        for(int i=0;i<n;i++)
        {//长度
            int a=0,t=0,g=0,c=0; //分别对应每个核酸的个数
            for(int j=0;j<m;j++)
            {//把所有字符串的第i个字符遍历一遍,判断哪个核酸最多
                if(dna[j][i] == 'A')
                {
                    a++;
                }
                else if(dna[j][i] == 'T')
                {
                    t++;
                }
                else if(dna[j][i] == 'G')
                {
                    g++;
                }
                else if(dna[j][i] == 'C')
                {
                    c++;
                }
            }
            if(a == m || t == m || c == m || g == m )
            {//这就表明在第i个位置的字符全是一样的
                if(a == m)
                {
                    ans=ans+'A';
                }
                else if(t == m)
                {
                    ans=ans+'T';
                }
                else if(c == m)
                {
                    ans=ans+'C';
                }
                else if(g == m)
                {
                    ans=ans+'G';
                }
            }
            else
            {//第i个位置存在字符不同,此时要找字符最多的那一个作为共识字符串的成员
                int temp;
                //count++; //错误数+1;
                temp=MAX(a,t,c,g);//找出四个中最大的那个
                //存在特殊情况,即至少两个相同且同为最大值,此时要找字典序最小的
                int same=0,aa=0,tt=0,cc=0,gg=0; //判断是否存在至少两个相同且互为最大值
                if(temp == a)
                {
                    same++;
                    aa++;
                }
                else if(temp == t)
                {
                    same++;
                    tt++;
                }
                else if(temp == c)
                {
                    same++;
                    cc++;
                }
                else if(temp == g)
                {
                    same++;
                    gg++;
                }
                if(same == 1)
                {//此时就一个字符个数最多
                    if(temp == a)
                    {
                        ans=ans+'A';
                        count=count+t+c+g;
                    }
                    else if(temp == t)
                    {
                        ans=ans+'T';
                        count=count+a+c+g;
                    }
                    else if(temp == c)
                    {
                        ans=ans+'C';
                        count=count+t+a+g;
                    }
                    else if(temp == g)
                    {
                        ans=ans+'G';
                        count=count+t+c+a;
                    }
                }
                else if(same>1)
                {//此时多个字符个数相同且均为最大值,此时要找其中字典序最小的字符
                    if(aa == 1)
                    {
                        ans=ans+'A';
                        count=count+t+c+g;
                    }
                    else if(cc == 1)
                    {
                        ans=ans+'C';
                        count=count+t+a+g;
                    }
                    else if(gg == 1)
                    {
                        ans=ans+'G';
                        count=count+t+c+a;
                    }
                    else if(tt == 1)
                    {
                        ans=ans+'T';
                        count=count+a+c+g;
                    }
                }
            }
        }
        cout<<ans<<endl;
        cout<<count<<endl;
    }
    return 0;
}
  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 8月14日
    • 创建了问题 8月6日

    悬赏问题

    • ¥30 关于#opencv#的问题:使用大疆无人机拍摄水稻田间图像,拼接成tif图片,用什么方法可以识别并框选出水稻作物行
    • ¥15 Python卡尔曼滤波融合
    • ¥20 iOS绕地区网络检测
    • ¥15 python验证码滑块图像识别
    • ¥15 根据背景及设计要求撰写设计报告
    • ¥20 能提供一下思路或者代码吗
    • ¥15 用twincat控制!
    • ¥15 请问一下这个运行结果是怎么来的
    • ¥15 单通道放大电路的工作原理
    • ¥30 YOLO检测微调结果p为1