Advertisement
gha890826

0521-bonus DNA 排序

May 21st, 2021
787
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.38 KB | None | 0 0
  1. #include <iostream>    
  2. #include<iomanip>    
  3. #include <cmath>  
  4. #include<string>    
  5. using namespace std;
  6.  
  7. int n, m;
  8.  
  9. class DNA {
  10. public:
  11.     DNA() :str(""), order(0) {};
  12.     DNA(string in) :str(in), order(0) {};
  13.     string str;
  14.     int order;
  15.     void count_order();
  16. };
  17.  
  18. int main()
  19. {
  20.     while (cin >> m >> n)
  21.     {
  22.         DNA *dna=new DNA[n];
  23.         for (int i = 0; i < n; i++)
  24.         {
  25.             string temp;
  26.             cin >> temp;
  27.             dna[i] = DNA(temp);
  28.             dna[i].count_order();
  29.             //cout << "***order" << dna[i].order << endl;
  30.         }
  31.         DNA* ans = new DNA[n];
  32.         for (int i = 0; i < n; i++)
  33.         {
  34.             int min_order = 99999, min_num = -1;
  35.             for (int j = 0; j < n; j++)
  36.             {
  37.                 if (dna[j].order < min_order)
  38.                 {
  39.                     min_order = dna[j].order;
  40.                     min_num = j;
  41.                 }
  42.             }
  43.             //cout << "pick " << min_num << endl;
  44.             ans[i] = dna[min_num];
  45.             dna[min_num].order = 99999;
  46.            
  47.         }
  48.         for (int i = 0; i < n; i++)
  49.         {
  50.             cout << ans[i].str << endl;
  51.             //cout << "===order" << ans[i].order << endl;
  52.         }
  53.     }
  54. }
  55.  
  56. void DNA::count_order()
  57. {
  58.     int ans = 0;
  59.     for (int i = 0; i < m; i++)
  60.     {
  61.         for (int j = i + 1; j < m; j++)
  62.         {
  63.             if (int(str[i]) > int(str[j]))
  64.             {
  65.                 //cout << str[i] << ">" << str[j] << endl;
  66.                 ++ans;
  67.             }
  68.         }
  69.     }
  70.     this->order = ans;
  71. }
  72.  
  73. /*
  74. 6 5
  75. ATTTGC
  76. GCGCAT
  77. ATGCCC
  78. CCCCGT
  79. AAACTG
  80. */
  81. /*
  82. 開發一隻程式來測量DNA字串的度量值是DNA是不規則單元的數量,例如,在字母序列“ DAAAFC ”中,此度量為5,因為D大於其右邊的四個字母,F大於其右邊的一個字母,該度量是稱為序列中的反轉數。
  83.  
  84. 例如:序列“ AACEDGG ”只有一個要交換(E和D) ,此度量為1 ,序列“ ZWSD ” ,此度量為6 。
  85. 雖然DNA字符串序列(僅包含四個字母A,C,G和T的序列),但是會有不同字母順序對它們進行分類,而要按“排序”的順序對它們進行分類,從“最排序”到“最不排序。 所有的字符串都具有相同的長度。
  86.  
  87. 輸入說明:
  88.  
  89. 每個數據集的第一行包含兩個整數:給出字串長度的正整數n(0<n≤100); 和一個正整數m(0<m≤100)給出字串數。
  90. 它們之後是m行,每行包含一個長度為n的字符串。
  91.  
  92. 輸出說明:
  93.  
  94. 在整組DNA字串集去排列符合題目
  95.  
  96. SAMPLE INPUT
  97.  
  98. 6 5↵
  99. ATTTGC↵
  100. GCGCAT↵
  101. ATGCCC↵
  102. CCCCGT↵
  103. AAACTG↵
  104.  
  105. SAMPLE OUTPUT
  106.  
  107. CCCCGT↵
  108. AAACTG↵
  109. ATTTGC↵
  110. GCGCAT↵
  111. ATGCCC↵
  112. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement