A1051. DNA序列
生活随笔
收集整理的這篇文章主要介紹了
A1051. DNA序列
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
問題描述
人類基因組計劃的第一階段于2000年6月26日勝利結束,我國的科研工作者圓滿地完成了其中的1%的測序工作。眾所周知,對于任意兩個人來說,他們的染色體上的DNA序列大部分是相同的(否則就不是同一物種了),但是總會有少數堿基對不相同(否則世界上的人長得都一模一樣了)。堿基的不同是由于基因的變異引起的。例如在某個人的DNA序列中,一位點上A突變成G。但每個人的DNA序列的變異位置都是不盡相同的。這樣,對于大部分位點來說,很有可能是這么一種情況:大部分人在這個位點上的堿基是一致的(因為沒有發生變異),少數人具有不同的堿基(因為發生了變異)。
這樣就給我們一個啟發:在測序的過程中,如果僅僅使用一個人的樣本的話,在很多位點上測出的結果就不具有代表性;如果能夠測出多個人的序列,那么就有可能“整合”出一段具有人類共性的序列出來,這樣更有利于研究。
比如說,我們要測人的某一段的DNA序列,得到了4個人的樣本:
AAAGGCCT
AGAGCTCT
AAGGATCT
AAACTTCT
按照如下:
1、 取出在每一個位置上出現次數最多的堿基作為整合后該位置上的堿基
2、 如果有一個位置上出現次數最多的堿基不止一種,那么在出現次數最多的堿基中,優先選擇A,其次C,再次G,最后T。
按照上邊的規則,整合后的序列為:
AAAGATCT 輸入格式 輸入數據的第一行是一個數字N(2<=N<=10),代表DNA序列的個數
接下來有N行,每行都是一個由AGCT組成的字符串,代表每個DNA序列,保證這些序列擁有相同的長度
序列的長度在2到100之間 輸出格式 僅輸出一個字符串,代表整合后的DNA序列 樣例輸入 4
AAAGGCCT
AGAGCTCT
AAGGATCT
AAACTTCT 樣例輸出 AAAGATCT package www.tsinsen.com;import java.util.Scanner;public class A1051 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubScanner scan=new Scanner(System.in);int n=scan.nextInt();String[] strs=new String[n];for(int i=0;i<n;i++){strs[i]=scan.next();}int[][] nums=new int[strs[0].length()][4];for(int i=0;i<n;i++){for(int j=0;j<strs[0].length();j++){char c=strs[i].charAt(j);switch(c){case 'A':nums[j][0]++;break;case 'C':nums[j][1]++;break;case 'G':nums[j][2]++;break;case 'T':nums[j][3]++;break;}}}StringBuffer sb=new StringBuffer();for(int i=0;i<strs[0].length();i++){int max=nums[i][0];int max_index=0;for(int j=1;j<4;j++){if(nums[i][j]>max){max=nums[i][j];max_index=j;}}switch (max_index){case 0:sb.append("A");break;case 1:sb.append("C");break;case 2:sb.append("G");break;case 3:sb.append("T");break;default:break;}}System.out.println(sb.toString());}}
?
轉載于:https://www.cnblogs.com/henuLiGang/p/8485728.html
總結
以上是生活随笔為你收集整理的A1051. DNA序列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Lucene全文检索
- 下一篇: VUE全局api