解题: 1.思路:先算无序度;再排序;当无序度一样的时候,注意不要重复输出; 2.代码:
#include<iostream> #include<cstring> using namespace std; //------------------------------------------------------------- int transScore(char ch[], int n) { // 将DNA序列转换为整数列 int arr[50] = { 0 }; for (int j = 0;ch[j] != '\0'; j++) { switch (ch[j]) { case 'A': arr[j] = 4; break; case 'C': arr[j] = 3; break; case 'G': arr[j] = 2; break; case 'T': arr[j] = 1; break; default: break; } } //计算无序度 int score = 0; for (int i = 0; i < n - 1; i++) { for (int j = i + 1; j < n; j++) { if (arr[j] > arr[i]) score++; } } return score; } void sorted(int arr[], int m) {//选择排序,从小到大 int temp = 0; for (int i = 0; i < m-1; i++) { for (int j = i + 1; j < m; j++) { if (arr[j] < arr[i]) { temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } } //------------------------------------------------------------- int main() { int n, m;// 基因序列 长度n(<50),个数m(<100) cin >> n >> m; cin.get();//读入下一位 char DNA[100][50] = { '\0' }; int dnaScore[100] = { 0 }; int sortArr[100] = { 0 }; for (int i = 0; i < m; i++) { cin.getline(DNA[i], 50); cout << endl; dnaScore[i] = transScore(DNA[i], n); sortArr[i] = dnaScore[i]; //用于输出的记录位置 } //选择排序 输出 sorted(sortArr, m); int netSortArr[100] = { 0 }; int k = 0; for (int i = 0; i < m; i++) {// 创建元素唯一的排序数组 if (sortArr[i + 1] == sortArr[i]) continue; netSortArr[k++] = sortArr[i]; } for (int i = 0; i < k; i++) { for (int j = 0; j < m; j++) { if (dnaScore[j] == netSortArr[i]) cout << DNA[j] << endl; } } return 0; } 运行结果 ##3.1 ##3.2