当前位置: 代码迷 >> 综合 >> ACM程序设计书中题目--E(DNA sorting)
  详细解决方案

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

热度:4   发布时间:2024-01-12 14:43:54.0

题意简述:按照特定的顺序:即最有序到最无序排列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;
}

  相关解决方案