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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值