zoukankan      html  css  js  c++  java
  • Openjudge计算概论-DNA排序

    /*=====================================
    DNA排序
    总时间限制: 1000ms 内存限制: 65536kB
    描述
    给出一系列基因序列,由A,C,G,T四种字符组成。对于每一个序列,定义其逆序对如下: 
    序列中任意一对字符X和Y,若Y在X的右边(不一定相邻)且Y < X,则称X和Y为一个逆序对。 
    例如GAC这个序列,其中GC,GA都是逆序对。 
    
    一个序列的逆序对越多,则认为其"无序度"越高。你的任务是将基因按照无序度从小到大的顺序排序,如果存在无序度相同的序列,则按照原始输入顺序输出。
    
    输入
    首先是基因序列的长度n(0 < n <= 50)和基因序列的个数m ( 0 < m <= 100).
    然后依次是这m个基因序列.
    输出
    输出排序后的m个基因序列。
    样例输入
    10 6
    AACATGAAGG
    TTTTGGCCAA
    TTTGGCCAAA
    GATCAGATTT
    CCCGGGGGGA
    ATCGATGCAT
    样例输出
    CCCGGGGGGA
    AACATGAAGG
    GATCAGATTT
    ATCGATGCAT
    TTTTGGCCAA
    TTTGGCCAAA

    思路:
    用结构体数组存储每一个字符串和字符串的逆序对个数。
    流程:
    循环:输入字符串——统计逆序对
    排序
    输出 ======================================
    */
     1 #include<stdio.h>
     2 struct DNA
     3 {
     4     char a[50];//一个基因序列 
     5     int num;//本基因序列的逆序对个数 
     6 };
     7 int niXuDui(struct DNA d,int len);//统计DNA序列变量d的逆序对个数 
     8 int main()
     9 {
    10     struct DNA  d[100],t;
    11     int n,m,i,j,flag;
    12     freopen("5.in","r",stdin);
    13     scanf("%d%d",&n,&m);
    14     for(i=0;i<m;i++)
    15     {
    16         scanf("%s",d[i].a);
    17         d[i].num=niXuDui(d[i],n);
    18     }
    19     
    20     for(i=1;i<m;i++)
    21     {
    22         flag=1;
    23         for(j=0;j<m-i;j++) 
    24         {
    25             if(d[j].num>d[j+1].num)
    26             {
    27                 flag=0;
    28                 t=d[j];
    29                 d[j]=d[j+1];
    30                 d[j+1]=t;
    31             }
    32         }
    33         if(flag) break; //if(flag==1) break;
    34     }
    35     for(i=0;i<m;i++)
    36     {
    37         printf("%s
    ",d[i].a);
    38     }
    39     return 0;
    40 }
    41 int niXuDui(struct DNA d,int len)//统计DNA序列变量d的逆序对个数 
    42 {
    43     int ans=0,i,j;
    44     for(i=0;i<len;i++)
    45     {
    46         for(j=i+1;j<len;j++)
    47         {
    48             if(d.a[j]<d.a[i]) ans++;
    49         }
    50     }
    51     return ans;
    52 }
    View Code
  • 相关阅读:
    [洛谷P2523] HAOI2011 Problem c
    [CF156D] Clues
    [洛谷P4769] NOI2018 冒泡排序
    [CF605E] Intergalaxy Trips
    [洛谷P4492] HAOI2018 苹果树
    [洛谷P3349] ZJOI2016 小星星
    [洛谷P4336] SHOI2016 黑暗前的幻想乡
    [洛谷P5364] SNOI2017 礼物
    [洛谷P2606] ZJOI2010 排列计数
    [洛谷P6078] CEOI2004 candy
  • 原文地址:https://www.cnblogs.com/huashanqingzhu/p/3575491.html
Copyright © 2011-2022 走看看