UVA 1368 java

计算出每一列,每个字母出现的次数,放在一个N*4的count矩阵的每一行中,选择出现次数最多的
如何保证字典序最小?每一行count矩阵从右到左扫描,只要>=max就赋值给max和index(存下标)

import java.util.Scanner;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int T=sc.nextInt();
        while (T-->0) {
        	int m=sc.nextInt();
        	int n=sc.nextInt();
        	char[][] a=new char[m][n];//存放m个长度为n的DNA序列
        	char[][] count=new char[n][4];//n*4的数组,存放每一列(注意是列),ACGT分别出现的次数
        	for (int i = 0; i < a.length; i++) {
				a[i]=sc.next().toCharArray();//读入DNA序列
				//计算count数组
				for (int j = 0; j < a[0].length; j++) {
					if(a[i][j]=='A') {
						count[j][0]++;
					}else if(a[i][j]=='C') {
						count[j][1]++;
					}else if(a[i][j]=='G') {
						count[j][2]++;
					}else if(a[i][j]=='T') {
						count[j][3]++;
					}
				}
			}
        	int sum=0;//保存Hamming距离
        	for (int i = 0; i < n; i++) {
        		int max=-1;
        		int index=999;//记录最后选择的字母的下标0-A 1-C 2-G 3-T
        		//从右往左扫描ACGT出现的次数,也就是TGCA的顺序,保证最后选择的字母字典序最小
				for (int j = 3; j >= 0; j--) {
					if(count[i][j]>=max) {
						max=count[i][j];
						index=j;
					}
				}
				if(index==0) {
					System.out.print('A');
				}else if(index==1) {
					System.out.print('C');
				}else if(index==2) {
					System.out.print('G');
				}else if(index==3) {
					System.out.print('T');
				}
				sum+=m-count[i][index];
			}
        	System.out.println();
        	System.out.println(sum);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值