算法竞赛入门经典(第2版)习题3-7 DNA序列 DNA Consensus String UVa1368

嘿嘿嘿,一次AC了

//#define TESTING
//#define LOCAL 
#include<stdio.h>
#include<ctype.h>
#include<string.h>

char s[55][1005],h[55],r[1005];

int main()
{
#ifdef LOCAL
freopen("xt3-7.in","r", stdin);
#endif
	int m,n,T,tot;	
	char temp;
	scanf("%d", &T);
	while(T--)
	{
		memset(s,0,sizeof(s));
		memset(h,0,sizeof(h));
		memset(r,0,sizeof(r));
		tot = 0;
		//读取个数m,长度n 
		scanf("%d %d", &m, &n);
		getchar(); 
		//读取个数m,长度n结束 
		
		//读取DNA序列 
		char temp;
		temp = getchar();
		if(isalpha(temp))
		{
			for(int i = 0; i < m; i++)
			{
				for(int j = 0; j < n; j++)
				{
					if(i+j == 0) s[0][0] = temp;
					else s[i][j] = getchar();
					if(!isalpha(s[i][j])) j--;
					
				}
			}
			
		} 		
		//读取DNA序列结束 
		
		//计算、记录各位最小Hamming字符 及Hamming值 
		for(int i = 0;i < n; i++)
		{
			int a=0,c=0,g=0,t=0;
			for(int j = 0; j < m; j++)
			{
				if(s[j][i]=='A') a++;
				else if(s[j][i]=='C') c++;
				else if(s[j][i]=='G') g++;
				else t++;
			}
			int max = a;
			if(max<c) max = c;
			if(max<g) max = g;
			if(max<t) max = t;
			if(max == a)
			{
				r[i]='A';
				tot = tot+c+g+t;
			}
			else if(max == c)
			{
				r[i]='C';
				tot = tot+a+g+t;
			}
			else if(max == g)
			{
				r[i]='G';
				tot = tot+a+c+t;
			}
			else if(max == t)
			{
				r[i]='T';
				tot = tot+a+c+g;
			}			
		}
		//计算、记录各位最小Hamming字符 及Hamming值结束 
		//输出 
#ifdef TESTING
		printf("T:%d\n",T);
		printf("m:%d n:%d\n", m, n);
		for(int i  = 0; i < m; i++)
		{
			for(int j = 0; j < n; j++)
			{
				printf("%c", s[i][j]);
			}
			printf("\n");
		}
		printf("\n");
#endif
		for(int i = 0; i <n; i++)printf("%c", r[i]);
		printf("\n");
		printf("%d", tot);
		printf("\n");
		//输出结束 
	}
	return 0;	
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值