解题:
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