DNASorting.java
上传用户:along415
上传日期:2018-01-31
资源大小:3k
文件大小:3k
源码类别:

DNA

开发平台:

Java

  1. import java.io.*;
  2. public class DNASorting {
  3. /**Cataloguing a sequence of DNA strings 
  4.  * @param args the command line arguments
  5.  */
  6. public static void main(String[] args) throws IOException{
  7. //REQUIRES:Enter an integer M, then a blank line followed by M datasets
  8. //         The first line of each dataset contains two integers: 
  9. //         a positive integer n ( ) giving the length of the strings;
  10. //         and a positive integer m ( ) giving the number of strings. 
  11. //         These are followed by m lines, each containing a string of length n. 
  12. //EFFECTS: For each dataset, output the list of input strings, 
  13. //         arranged from ``most sorted'' to ``least sorted''. 
  14. //         If two or more strings are equally sorted, list them
  15. //         in the same order they are in the input file.
  16.  
  17. java.io.LineNumberReader r = new java.io.LineNumberReader(new java.io.InputStreamReader(System.in));                 
  18.         
  19.     String s;
  20.     char[] datasetEach;         
  21.     int M;
  22.         
  23.     while ( (s = r.readLine()) != null){
  24.      if (Integer.valueOf(s.trim()).intValue() == 0){
  25.      System.exit(0);
  26.             return;
  27.         }
  28.             
  29.         M = Integer.valueOf(s.trim()).intValue();
  30.         for(int a = 0; a < M; M++){
  31.         String s1 = r.readLine();
  32.         String s2 = (r.readLine()).trim();
  33.            
  34.         String s3 = s2.substring(0,s2.length()-2);            
  35.         String s4 = s2.substring(s2.length()-1,s2.length());
  36.            
  37.         int n = Integer.parseInt(s3);
  38.         int m = Integer.parseInt(s4);
  39.         datasetEach = new char[n + 1];
  40.         String [] dataset= new String [m]; 
  41.  
  42.         for (int i = 0; i < m; i++) {
  43.          // Read in a dataset.
  44.          dataset[i] = "0" +r.readLine(); 
  45.         
  46.             for (int j = 0; j < n + 1 ; j++)
  47.              datasetEach[j] = dataset[i].charAt(j);                 
  48.                 
  49.             int counter = 0;
  50.         
  51.             //calculate the inversionValue of each line 
  52.             for(int p = 1; p < n ;p++ ){
  53.          for(int q = p + 1; q < n + 1; q++){
  54.          counter += inversionValue(datasetEach[p], datasetEach[q]);
  55.          } 
  56.          }
  57.         
  58.             //add the counter into each line of the dataset; 
  59.          Object o =new Integer(counter);
  60.          String s6 = o.toString();
  61.             dataset[i] = new String(s6 + dataset[i].substring(1));                                         
  62. }
  63.             
  64.         //sort each line of the dataset,arranged from ''most sorted'' to ''least sorted''
  65.         for(int i = 1; i < m; i++){
  66.          for(int j = 0; j < m-1; j++){
  67.          int e = Integer.parseInt(dataset[j].substring(0,dataset[j].length()-n));
  68.          int f = Integer.parseInt(dataset[j + 1].substring(0,dataset[j + 1].length()-n));
  69.         
  70.          if(e > f){
  71.          String g;
  72.          g = dataset[j];
  73.          dataset[j] = dataset[j + 1];
  74.          dataset[j + 1] = g;
  75.          }
  76.          }
  77.         }
  78.             
  79.         //output the result
  80.         for(int i = 0; i < m; i++){
  81.             System.out.println(dataset[i].substring(dataset[i].length() - n,dataset[i].length()));
  82.         }
  83.    }
  84.    }
  85. }
  86. private static int inversionValue(char a, char b){
  87. //EFFECTS:calculate the inversionValue of two chars;
  88. if(a > b)
  89. return 1;
  90. else 
  91. return 0;
  92. }
  93. }