• DNA排序


    Q: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


    S:

    #include <stdio.h>
    struct DNA
    {
    	char order[50];//基因序列 
    	int num;//逆序对总数 
    } ;
    int sum(char D[],int len);//子函数用于统计逆序对总数 
    int main()
    {
    	struct DNA a[101],temp;
    	int n,m;//m个序列,长度即len为n 
    	int i,j;
    	//freopen("2.in","r",stdin);
    	scanf("%d%d",&n,&m);
    	for(i=0;i<m;i++)
    	{
    		scanf("%s",a[i].order);
    		a[i].num=sum(a[i].order,n);
    	}
    	for(i=0;i<m-1;i++)
    	{
    		for(j=i;j>=0;j--)
    		{
    			if(a[j].num>a[j+1].num)
    			{
    				temp=a[j];
    				a[j]=a[j+1];
    				a[j+1]=temp;
    			}
    		}
    	} 
    	for(i=0;i<m;i++)
    	{
    		puts(a[i].order);
    	}
    	return 0;
    }
    int sum(char D[],int len)//子函数用于统计逆序对总数 
    {
    	int i,j;
    	int all=0;
    	for(i=0;i<len-1;i++)
    	{
    		for(j=i+1;j<len;j++)
    		{
    			if(D[i]>D[j])
    			all++;
    		}
    	} 
    	return all;
    }
    

     








  • 相关阅读:
    springboot内置分页技术
    打印正三角,倒三角,实心棱形,空心棱形
    显示Pl/Sql Developer window list窗口
    Oracle 中使用正则表达式
    前端使用pdf.js预览pdf文件,超级简单
    tomcat8踩坑:url包含|等特殊字符报错400的问题
    使用 Itext 生成PDF字节数组(文件流不落地)
    使用 Itext 生成PDF
    回车提交事件
    python爬虫之re正则表达式库
  • 原文地址:https://www.cnblogs.com/LegendLa/p/4255353.html
Copyright © 2020-2023  润新知