用二维数组存要输入DNA序列,依次计算其中的反转数个数已经并存入另一个数组中,再每次挑选个数最少的输出DNA序列。
select函数为每次找最小值函数,关键在于如何在下一次找最小值时排除之前已经输出的,在此用了结构体,其中有两个数据,一个存反转数个数,一个为标志表示该数值是否已经使用过。
#include<iostream>
using namespace std;
struct number
{
int count;
int syb;
};
int select(number *c,int n);
int main(void)
{
int m,n;
int count_;
cin>>m>>n;
char a[n][m];
struct number c[n];
for(int i=0;i<n;i++)
{
cin>>a[i];
count_=0;
for(int j=0;j<m;j++)
{
for(int k=j+1;k<m;k++)
{
if(a[i][j]>a[i][k]) count_++;
}
}
c[i].count=count_;
c[i].syb=1;
}
for(int i=0;i<n;i++)
{
int y=select(c,n);
c[y].syb=0;
for(int j=0;j<m;j++)
cout<<a[y][j];
cout<<endl;
}
}
int select(number *c,int n)
{
int m=0;
for(int i=0;i<n;i++)
{
while(c[m].syb!=1)
{
m++;
}
if((c[i].count<c[m].count)&&(c[i].syb==1)) m=i;
}
return m;
}