poj 3038

来源:互联网 发布:腾讯视频 网络连接异常 编辑:程序博客网 时间:2024/04/30 06:17
现在有一些长度相等的DNA串(只由ACGT四个字母组成),请将它们按照逆序对的数量多少排序。
逆序对指的是字符串A中的两个字符A[i]、A[j],具有i < j 且 A[i] > A[j] 的性质。如字符串”ATCG“中,T和C是一个逆序对,T和G是另一个逆序对,这个字符串的逆序对数为2。


输入
第1行:两个整数n和m,n(0<n<=50)表示字符串长度,m(0<m<=100)表示字符串数量

第2至m+1行:每行是一个长度为n的字符串
输出
按逆序对数从少到多输出字符串,逆序对数一样多的字符串按照输入的输出此题只要解决有多少逆序对,怎样按降序输出。

#include<stdio.h>

intmain()

{

int n,m,i,j,k,min,max=0;

char data[101][51];

int flag[101]={0};

int len[101]={0};

scanf("%d%d",&n,&m);

for(i=0;i<m;i++){

scanf("%s",&data[i]);

for(j=0;j<n;j++)

for(k=j+1;k<n;k++)

if(data[i][j]>data[i][k])//向后比较如果出现逆序,+1;

len[i]++;

if(len[i]>max)//比较各串重数,并记录max

max=len[i];

}

for(i=0;i<m;i++)

{

min=max+1;

for(j=0;j<m;j++)

{if(len[j]<min&&flag[j]==0)//最大值附min。flag[j]用来去掉重复的比较

{

min=len[j];k=j;//把最大重数序号赋给k;

}

}

flag[k]=1;

printf("%s\n",data[k]);

}

return0;

}

0 0
原创粉丝点击