京东笔试--X星人的基因
题目描述:
X星人的基因由A、B、C、D、E五种不同的结构组合而成。
如果两个性别不同的X星人的基因序列相似度大于50%,按照X星的法律他们是禁止结婚的,等于50%据说还是可以的。
那么基因的相似度怎么计算呢?分别从两个人身上取长度均为N的基因片段,如果它们的最长公共子序列
(注意,最长公共子序列不需要连续)的长度为M,则相似度=M/N。是不是很简单呢?
现在给你两段X星人的基因序列片段,请你判断他们是不是可以结婚?
代码实现
import java.util.Scanner;
public class Testwaixingren {
public static void main(String[] args) {
long start = System.currentTimeMillis();
int n;
double t;
System.out.println("请输入基因片段长度:");
Scanner in = new Scanner(System.in);
n = in.nextInt();
System.out.println("请两个基因片段:");
Scanner ins = new Scanner(System.in);
String a = ins.nextLine();
String b = ins.nextLine();
int m = LCS(a,b,0,0);
System.out.println(m);
System.out.println(n);
t = (double)m / (double)n ;
System.out.println("基因相似度为:"+ 100*t +"%");
long end = System.currentTimeMillis();
System.out.println("耗时:"+ (end-start) + "s");
}
public static int LCS(String a, String b, int i, int j ){
if(i>=a.length()||j>=a.length()) return 0;
if(a.charAt(i)==b.charAt(j))
return LCS(a,b,i+1,j+1)+1;
else
return LCS(a,b,i+1,j)>LCS(a,b,i,j+1)?LCS(a,b,i+1,j):LCS(a,b,i,j+1);
}
}