描述:

给出一系列基因序列,由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
思路:用结构体,统计每个字符串的逆序对个数,排序,输出即可。
代码如下(本代码来自我的老师:http://www.cnblogs.com/huashanqingzhu/p/3575491.html):
 #include<stdio.h>
struct DNA
{
char a[];//一个基因序列
int num;//本基因序列的逆序对个数
};
int niXuDui(struct DNA d,int len);//统计DNA序列变量d的逆序对个数
int main()
{
struct DNA d[],t;
int n,m,i,j,flag;
scanf("%d%d",&n,&m);
for(i=;i<m;i++)
{
scanf("%s",d[i].a);
d[i].num=niXuDui(d[i],n);
}
for(i=;i<m;i++)
{
flag=;
for(j=;j<m-i;j++)
{
if(d[j].num>d[j+].num)//选择排序
{
flag=;
t=d[j];
d[j]=d[j+];
d[j+]=t;
}
}
if(flag) break; //if(flag==1) break;
}
for(i=;i<m;i++)
{
printf("%s\n",d[i].a);
}
return ;
}
int niXuDui(struct DNA d,int len)//统计DNA序列变量d的逆序对个数
{
int ans=,i,j;
for(i=;i<len;i++)//从前到尾慢慢扫
{
for(j=i+;j<len;j++)//两重循环,不多
{
if(d.a[j]<d.a[i]) ans++;
}
}
return ans;
}

Openjudge-计算概论(A)-DNA排序的更多相关文章

  1. OpenJudge计算概论-整数奇偶排序

    /*===================================== 整数奇偶排序 总时间限制: 1000ms 内存限制: 65536kB 描述 输入10个整数,彼此以空格分隔 重新排序以后 ...

  2. OpenJudge计算概论-取石子游戏

    OpenJudge计算概论-取石子游戏[函数递归练习] /*====================================================================== ...

  3. Openjudge计算概论-DNA排序

    /*===================================== DNA排序 总时间限制: 1000ms 内存限制: 65536kB 描述 给出一系列基因序列,由A,C,G,T四种字符组 ...

  4. Openjudge计算概论——数组逆序重放【递归练习】

    /*===================================== 数组逆序重放 总时间限制:1000ms 内存限制:65536kB 描述 将一个数组中的值按逆序重新存放. 例如,原来的顺 ...

  5. OpenJudge计算概论-计算书费

    /*============================================== 计算书费 总时间限制: 1000ms 内存限制: 65536kB 描述 下面是一个图书的单价表: 计算 ...

  6. OpenJudge计算概论-最高的分数

    /*======================================================== 最高的分数 总时间限制: 1000ms 内存限制: 65536kB 描述 孙老师 ...

  7. OpenJudge计算概论-字符串排序

    /*====================================================================== 字符串排序 总时间限制: 1000ms 内存限制: 6 ...

  8. OpenJudge计算概论-单词排序

    /*===================================== 单词排序 总时间限制:1000ms 内存限制: 65536kB 描述 输入一行单词序列,相邻单词之间由1个或多个空格间隔 ...

  9. OpenJudge计算概论-奇偶排序

    /*==============================================总时间限制: 1000ms 内存限制: 65536kB描述 输入十个整数,将十个整数按升序排列输出,并且 ...

  10. OpenJudge计算概论-比饭量【枚举法、信息数字化】

    /*====================================================================== 比饭量 总时间限制: 1000ms 内存限制: 655 ...

随机推荐

  1. 我喜欢的快捷键 webstorm

    1.打开设置  ctrl+alt+s 2.重命名 rename  ctrl+r

  2. C#数字类型及运算符

  3. PHP 在 Nginx 下主动断开连接 Connection Close 与 ignore_user_abort 后台运行

    这两天弄个PHP调用 SVN 同步 update 多台服务器更新的程序,为了避免 commit 的时候不会被阻塞卡半天得想个办法只请求触发,而不需要等待程序 update 完成返回结果这样耗时太长,所 ...

  4. HDU 5886 Tower Defence

    树的直径. 比赛的时候想着先树$dp$处理子树上的最长链和次长链,然后再从上到下进行一次$dfs$统计答案,和$CCPC$网络赛那个树$dp$一样,肯定是可以写的,但会很烦.......后来写崩了. ...

  5. java中使用数组和链表简单实现SJBMap

    import java.util.LinkedList; public class SJBMap { private Object[] elementData; private int size; p ...

  6. python numpy基础 数组和矢量计算

    在python 中有时候我们用数组操作数据可以极大的提升数据的处理效率, 类似于R的向量化操作,是的数据的操作趋于简单化,在python 中是使用numpy模块可以进行数组和矢量计算. 下面来看下简单 ...

  7. hdu 3045 Picnic Cows(斜率优化DP)

    题目链接:hdu 3045 Picnic Cows 题意: 有n个奶牛分别有对应的兴趣值,现在对奶牛分组,每组成员不少于t, 在每组中所有的成员兴趣值要减少到一致,问总共最少需要减少的兴趣值是多少. ...

  8. [Q]无矩形外框块参照图形的识别

    该图纸的图框由块参照组成,其外侧图框不是矩形 使用默认设置无法正确识别,需要做以下修改:不勾选“块/外部参照”,勾选“块/外部参照边界”,勾选“制定块”并选择图框(块参照).

  9. 导入导出Mysql数据库、表结构、表数据

    由sql文件导入 mysql -uusername -ppwd < ./abc.sql 导出整个数据库的表结构 mysqldump -uroot -pdbpasswd -d dbname > ...

  10. JS中千分位的处理

    function commafy(num) { //1.先去除空格,判断是否空值和非数 num = num + ""; num = num.replace(/[ ]/g, &quo ...