uva1368(贪心)

题意:
给出很多DNA序列,每个长度一样;让你找出一个序列,与这些序列相差最小,最小相差多少;


思路:
就是取所有串第一位中出现最多的,作为结果的第一位,并算出不是这个字母的有几个..一直推到最后一位;

#include
#include
#include
using namespace std;

char dna[55][1005];
char ans[1005];
int res;
int m,n;
int cnta,cntt,cntc,cntg;

int main() {
	int t;
	scanf("%d",&t);
	while(t--) {
		scanf("%d%d",&m,&n);
		for(int i = 0; i < m; i++) {
			scanf("%s",dna[i]);
		}
		res = 0;
		for(int i = 0; i < n; i++) {
			cnta = cntt = cntc = cntg = 0;
			for(int j = 0; j < m; j++) {
				if(dna[j][i] == 'A')
					cnta++;
				if(dna[j][i] == 'T')
					cntt++;
				if(dna[j][i] == 'C')
					cntc++;
				if(dna[j][i] == 'G')
					cntg++;
			}
			int temp;
			temp = max(cnta , max(cntt , max (cntc , cntg)));
			if(temp == cnta) {
				ans[i] = 'A';
				res += m - cnta;
				continue;
			}
			if(temp == cntc) {
				ans[i] = 'C';
				res += m - cntc;
				continue;
			}
			if(temp == cntg) {
				ans[i] = 'G';
				res += m - cntg;
				continue;
			}
			if(temp == cntt) {
				ans[i] = 'T';
				res += m - cntt;
				continue;
			}
		}
		ans[n] = '\0';
		printf("%s\n%d\n",ans,res);
	}
}


你可能感兴趣的:(算法设计)