Openjudge计算概论-DNA排序

简介: /*===================================== DNA排序 总时间限制: 1000ms 内存限制: 65536kB 描述 给出一系列基因序列,由A,C,G,T四种字符组成。
/*=====================================
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\n",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

 

相关文章
|
人工智能 Go
OpenJudge计算概论-单词排序
/*===================================== 单词排序 总时间限制:1000ms 内存限制: 65536kB 描述 输入一行单词序列,相邻单词之间由1个或多个空格间隔,请按照字母顺序输出这些单词(即按照字符串中字母的ASCII码排序,区分大小写,当首字母相同时,比较第2个字母,依次类推),要求重复的单词只输出一次。
895 0
|
人工智能 算法
OpenJudge计算概论-字符串排序
/*====================================================================== 字符串排序 总时间限制: 1000ms 内存限制: 65536kB 描述 参考整数排序方法,设计一种为字符串排序的算法,将字符串从小到大输出 输入 第一行为测试数据组数t, 后面跟着t组数据。
800 0
|
存储 人工智能 算法
Openjudge计算概论-求序列中的众数
/*===================================== 求序列中的众数 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个长度为N的整数序列 (不多于128个整数),每个整数的范围在[-10^52,10^52],计算这个序列的众数。
1009 0
|
人工智能
OpenJudge计算概论-计算鞍点
/*======================================================================== 计算鞍点 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一个二维 (5*5)数组,每行只有一个最大值,每列只有一个最小值。
1187 0
OpenJudge计算概论-求分数序列和
/*======================================================================== 求分数序列和 总时间限制: 1000ms 内存限制: 65536kB 描述 有一个分数序列 2/1,3/2,5/3,8/5,13/8,21/13,.... 求这个分数序列的前n项之和。
909 0
|
人工智能
Openjudge计算概论-奇数单增序列
/*===================================== 奇数单增序列 总时间限制: 1000ms 内存限制: 65536kB 描述 给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按增序输出。
1099 0
|
存储 人工智能
OpenJudge计算概论-找最大数序列
/*===================================== 找最大数序列 总时间限制: 1000ms 内存限制: 65536kB 描述 输入n行(n 不大于 30),每行不超过100个无符号整数,无符号数不超过4位。
1282 0
|
C++
OpenJudge计算概论-比饭量【枚举法、信息数字化】
/*====================================================================== 比饭量 总时间限制: 1000ms 内存限制: 65536kB 描述 3个人比饭量,每人说了两句话: A说:B比我吃的多,C和我吃的一样多 B说:A比我吃的多,A也比C吃的多 C说:我比B吃得多,B比A吃的多。
1284 0
|
存储 BI
OpenJudge计算概论-最长平台
/*=========================================================== 最长平台 总时间限制: 1000ms 内存限制: 65536kB 描述 已知一个已经从小到大排序的数组,这个数组的一个平台(Plateau)就是连续的一串值相同的元素,并且这一串元素不能再延伸。
985 0
|
BI 人工智能
OpenJudge计算概论-称体重【枚举法、信息数字化】
/*====================================================================== 称体重 总时间限制: 1000ms 内存限制: 65536kB 描述 赵、钱、孙、李四个人中既有大人也有小孩,给他们称体重时发现,他们每个人的体重都不一样,且体重(单位:公斤)恰好是10的整数倍,且他们的体重都不高 于50公斤,已知赵、钱两人的体重之和恰好等于孙、李两人的体重之和; 赵、李两人的体重之和大于孙、钱两人的体重之和,并且赵、孙俩人的体重之和还小于钱的体重。
1086 0