题意简述:按照特定的顺序:即最有序到最无序排列DNA。字母比其后多少个字母大,指标即为多少。
解题思路:
1、首先将DNA序列输入,因为有多组数据,多行DNA序列,所以定义结构体实现。
2、结构体的定义:包含一个存放字符串的字符数组,一个整数b用于存放该字符串的指标。
3、输入两个数即字符串长度与个数。
4、利用循环得到指标的个数。
5、对每个DNA序列的指标大小进行比较,最有序的先输出,即指标小的先输出。
(此处用的循环挨个找的方法,想想也可以用sort函数直接对结构体进行排序。将结构体存于vector<DNA>w中,然后用sort定义一个函数,按照指标的大小进行排序。)
解题感想:
用循环可以解决问题,但是用STL更容易解决,代码更短也更省时,还需要对STL进行更多的练习。
源代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
struct DNA
{
char a[50];int b;
}c[100],d;int n,i;cin>>n;for (i=0;i<n;i++){
int o,j,t,r,x,max;cin>>o>>j;for (t=0;t<j;t++)cin>>c[t].a;if (i!=0)cout<<endl;for (t=0;t<j;t++){
c[t].b=0;for (r=0;r<o;r++)for (x=r;x<o;x++)if (c[t].a[r]>c[t].a[x])c[t].b++;}for (t=0;t<j;t++)for (r=t;r<j;r++)if (c[t].b>c[r].b){
max=r;r=t;t=max;}for (t=0;t<j;t++)for (r=t;r<j;r++)if (c[t].b>c[r].b){
d=c[t];c[t]=c[r];c[r]=d;}for (t=0;t<j;t++){
cout<<c[t].a<<endl;}}return 0;
}