zoukankan      html  css  js  c++  java
  • 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;
    }
    

     








  • 相关阅读:
    测试用例(等价类和边界值方法)
    缺陷报告的组成
    软件测试QA、QC、QM的关系与区别
    软件的开发模式
    软件工程及生命周期
    互联网产品类型与产品工具
    canvas 时钟
    test2
    test121212
    关于iOS和OS X废弃的API你需要知道的一切
  • 原文地址:https://www.cnblogs.com/LegendLa/p/4255353.html
Copyright © 2011-2022 走看看