zoukankan      html  css  js  c++  java
  • java实现第三届蓝桥杯DNA对比

    DNA对比

    脱氧核糖核酸即常说的DNA,是一类带有遗传信息的生物大分子。它由4种主要的脱氧核苷酸(dAMP、dGMP、dCMT和dTMP)通过磷酸二酯键连接而成。这4种核苷酸可以分别记为:A、G、C、T。
    DNA携带的遗传信息可以用形如:AGGTCGACTCCA… 的串来表示。DNA在转录复制的过程中可能会发生随机的偏差,这才最终造就了生物的多样性。

    为了简化问题,我们假设,DNA在复制的时候可能出现的偏差是(理论上,对每个碱基被复制时,都可能出现偏差):

    1. 漏掉某个脱氧核苷酸。例如把 AGGT 复制成为:AGT

    1. 错码,例如把 AGGT 复制成了:AGCT

    2. 重码,例如把 AGGT 复制成了:AAGGT

    如果某DNA串a,最少要经过 n 次出错,才能变为DNA串b,则称这两个DNA串的距离为 n。

    例如:AGGTCATATTCC 与 CGGTCATATTC 的距离为 2

    你的任务是:编写程序,找到两个DNA串的距离。

    【输入、输出格式要求】

    用户先输入整数n(n<100),表示接下来有2n行数据。

    接下来输入的2n行每2行表示一组要比对的DNA。(每行数据长度<10000)

    程序则输出n行,表示这n组DNA的距离。

    例如:用户输入:
    3
    AGCTAAGGCCTT
    AGCTAAGGCCT
    AGCTAAGGCCTT
    AGGCTAAGGCCTT
    AGCTAAGGCCTT
    AGCTTAAGGCTT

    则程序应输出:
    1
    1
    2

    【注意】

    请仔细调试!您的程序只有能运行出正确结果的时候才有机会得分!

    在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。

    请把所有函数写在同一个文件中,调试好后,拷贝到【考生文件夹】下对应题号的“解答.txt”中即可。

    相关的工程文件不要拷入。
    源代码中不能使用诸如绘图、Win32API、中断调用、硬件操作或与操作系统相关的API。

    允许使用STL类库,但不能使用MFC或ATL等非ANSI c++标准的类库。
    例如,不能使用CString类型(属于MFC类库),不能使用randomize, random函数(不属于ANSI C++标准)

    import java.util.Scanner;
    
    public class Main {
        public static int n;
        public static String[] arrayA;
        
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            n = in.nextInt();
            arrayA = new String[2 * n + 1];
            in.nextLine();
            for(int i = 1;i <= n;i++) {
                arrayA[2 * i - 1] = in.nextLine();
                arrayA[2 * i] = in.nextLine();
            }
            int[] result = new int[n + 1];
            for(int i = 1;i <= n;i++) {
                String A = arrayA[2 * i - 1];
                String B = arrayA[2 * i];
                int lenA = A.length();
                int lenB = B.length();
                int[][] dp = new int[lenA + 1][lenB + 1];
                for(int k = 0;k < lenA;k++)
                    dp[k][0] = k;
                for(int k = 0;k < lenB;k++)
                    dp[0][k] = k;
                for(int a = 1;a <= lenA;a++) {
                    for(int b = 1;b <= lenB;b++) {
                        if(A.charAt(a - 1) == B.charAt(b - 1))
                            dp[a][b] = dp[a - 1][b - 1];
                        else {
                            dp[a][b] = Math.min(dp[a - 1][b]+1, Math.min(dp[a][b-1]+1, dp[a-1][b-1]+1));
                        }
                    }
                }
                result[i] = dp[lenA][lenB];
            }
            for(int i = 1;i <= n;i++)
                System.out.println(result[i]);
        }
    }
    
  • 相关阅读:
    nginx-1.8.1的安装
    ElasticSearch 在3节点集群的启动
    The type java.lang.CharSequence cannot be resolved. It is indirectly referenced from required .class files
    sqoop导入导出对mysql再带数据库test能跑通用户自己建立的数据库则不行
    LeetCode 501. Find Mode in Binary Search Tree (找到二叉搜索树的众数)
    LeetCode 437. Path Sum III (路径之和之三)
    LeetCode 404. Sum of Left Leaves (左子叶之和)
    LeetCode 257. Binary Tree Paths (二叉树路径)
    LeetCode Questions List (LeetCode 问题列表)- Java Solutions
    LeetCode 561. Array Partition I (数组分隔之一)
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12947367.html
Copyright © 2011-2022 走看看