您的位置:首页 > 其它

ACM程序设计书中题目--E(DNA sorting)

2017-03-19 19:29 225 查看
题意简述:按照特定的顺序:即最有序到最无序排列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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: