您的位置:首页 > 其它

UVa 1368 - DNA Consensus String

2015-02-03 13:14 225 查看
总起来算是做了一天多了,昨天没有交题,这种状态可不好!    本题还是有个地方卡了,倒不是算法方面,还是对 getchar(); 的使用理解的不够深刻,有必要好好的去严扣定义,这个题关于找字典序最小的解的算法,我觉得我的做法还是比较巧妙的,就是突然一下子就有的想法,平时还是要养成多思考的习惯。  最后一点,貌似UVa 交题时 如果程序中有代码注释会被判CE,试了好几次了,这个以后要注意啊!

#include <stdio.h>
#include <string.h>
#include <ctype.h>
char a[2000][2000];
char b[2000];
int num[2000][4];
int main()
{
int i,j,k,r,s,t,m,n,h,sum;
scanf("%d",&h);
for(k=1; k<=h; k++)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(num,0,sizeof(num));
scanf("%d %d",&m,&n);
getchar();
for(i=0; i<m; i++)
gets(a[i]);
//getchar();
for(i=0; i<m; i++)
for(j=0; j<n; j++)
{
if( a[i][j] == 'A' )
num[j][0]++;
else if( a[i][j] == 'C' )
num[j][1]++;
else if( a[i][j] == 'G' )
num[j][2]++;
else if( a[i][j] == 'T' )
num[j][3]++;
}
//printf("%d\n",num[0][0]);
t=0;
for(i=0; i<n; i++)
{
int max=-1000;
for(j=3; j>=0; j--)
if( num[i][j] >= max )
{ max=num[i][j]; r=j; }
if(r == 0)
b[t++] = 'A';
else if(r == 1)
b[t++] = 'C';
else if(r == 2)
b[t++] = 'G';
else if(r == 3)
b[t++] = 'T';
}
sum=0;
for(i=0; i<m; i++)
for(j=0; j<n; j++)
if(a[i][j] != b[j])
sum++;
printf("%s\n%d\n",b,sum);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: