算法竞赛入门经典(第二版)3-7DNA序列UVA1368

一开始题意理解错了,做了很久,有点费劲

https://vjudge.net/problem/UVA-1368

#include<stdio.h>
#include<string.h>
int main()
{
    int t;
    scanf("%d",&t);
    while(t--) 
    {
        int m,n,sum=0;
    scanf("%d%d",&m,&n);
    while(m<4||m>50||n<4||n>1000)
    {
        printf("input again\n");
        scanf("%d%d",&m,&n);
    }
    
    char a[m][n];//二维数组保存输入的DNA序列 
    
    for(int x=0;x<m;x++)
        {
            scanf("%s",a[x]);//gets(a[i]);不行 第一行数组获取不到 
        }
    printf("最优解为\n");    
    for(int i=0;i<n;i++)//先循环列 
    {
        int b[4]={0};
        for(int j=0;j<m;j++)
        {
            //printf("%c\n",a[j][i]); 
            switch(char(a[j][i]))
            {
                case 'A': {b[0]++;//printf("----%d\n",b[0]);
                    break;
                }
                case 'C': {b[1]++;//printf("----%d\n",b[1]);
                    break;
                }
                case 'G':{b[2]++;//printf("----%d\n",b[2]);
                    break;
                }
                case 'T':{b[3]++;//printf("----%d\n",b[3]); 
                    break;
                }
            }
        }
    //    for(int Y=0;Y<4;Y++)
    //    { printf("[%d]=%d",Y,b[Y]);    }//测试是数组赋值是否正确 
        int max=b[0],k,flag=0;
        for(k=1;k<4;k++)
        {
            if(b[k]>max)
            {
                max=b[k];
                flag=k;
            }
            
            
        }
    //    printf("max=b[%d]=%d",flag,max);//测试是否正确取到最大值 

        switch(flag) 
        {
            case 0 :{printf("A");
                break;
            }
            case 1 :{printf("C");
                break;
            }
            case 2 :{printf("G");
                break;
            }
            case 3 :{printf("T");
                break;
            }
            
        } 
        sum+=m-max; 
    }
    printf("\nMin=%d\n\n",sum);
}
}
/*
    while(1)
    {
    int m,n;
    scanf("%d%d",&m,&n);
    if(m<4||m>50||n<4||n>1000)
    {
        printf("input again\n");
        scanf("%d%d",&m,&n);
    }
    
    
        char a[m][n+1];
        for(int i=0;i<m;i++)
        {
            scanf("%s",a[i]);//gets(a[i]);不行 第一行数组获取不到 
        }

    for(int j=0;j<m;j++) 
    {
        int count=0;
        //char temp;
        for(int k=0;k<n;k++)
        {
            for(int p=0;p<m;p++)
            {
                if(p==j) {
                    printf("key");
                    continue; 
                }
            else if(a[j][k]==a[p][k])
            {
                count++;
                printf("yes");
                }
                else{printf("no");
                }    
            }            
        }
        printf("count=%d\n",count);
            a[j][n]=count+48; //把数字变为对应字符 
    }
    
    int max=0;
    for(int x=0;x<m-1;x++)
    {
        if(int(a[x+1][n])>int(a[x][n]))
        {
        max=x+1;    
        }
        
        
    }
    printf("max=%d  %c\n",max,a[max][n]);
    
    for(int y=0;y<n;y++)
    {
        printf("%c",a[max][y]);
        
    }//printf("\n%s",a[max]);    
    }
*/ 
    

 
        

猜你喜欢

转载自www.cnblogs.com/lytuser/p/11707156.html