码迷,mamicode.com
首页 > 编程语言 > 详细

1104--DNA排序---闲来无事做水题啊

时间:2015-01-27 00:07:58      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:

问题描述:

逆序数可以用来描述一个序列混乱程度的量。例如,“DAABEC”的逆序数为5,其中D大于它右边的4个数·,E大于它右边的1的个数,4+1=5,又如,“ZWQM”的逆序数为3+2+1+0=6.现在有许多长度一样的字符串,每个字符串里面只会出现四种字母(A,T,C,G)。要求编写程序,将这些字符串按照它们的逆序数进行排序

输入:

第一行包括两个正整数,第一个表示字符串长度,第二表示字符串数量

输出:

将每个字符串按照其逆序数进行排序,如果两个字符串的逆序数相等,则按照输入中的两者的先后顺序进行排列

样列输入:

10 6
AACATGAAGG
TTTTGGCCAA
TTTGGCCAAA
GATCAGATTT
CCCGGGGGGA
ATCGATGCAT输出:

CCCGGGGGGA
AACATGAAGG
GATCAGATTT
ATCGATGCAT
TTTTGGCCAA
TTTGGCCAAA

 1 #include <stdio.h>
 2 #include <string.h>
 3 struct node
 4 {
 5  int key; // key 存原字符串的编号
 6  char str[55];
 7 }dna[110];
 8 int s(char str[])
 9 {
10 int sum=0,i,j;
11 int len=strlen(str);
12 int sd[50]={0};
13 for(i=0;i<len-1;i++)
14 {
15 for(j=i+1;j<len;j++)
16 {
17 if(str[i]>str[j]) sd[i]++;
18 }
19 }
20 
21 for(i=0;i<len;i++) sum=sum+sd[i];
22 return sum;
23 }
24 
25 void sort(int res[],int m)//简单的一个排序
26 {
27 int i,j,t;
28 for(i=0;i<m;i++)
29 for(j=i+1;j<m;j++)
30 if(res[i]>res[j])
31 {
32 t=res[i];
33 res[i]=res[j];
34 res[j]=t;
35 }
36 }
37 
38 int main(void)
39 {
40 int n,m,i,j;
41 int res[110];
42 scanf("%d %d",&n,&m);
43 if(n>0 && n<=50 && m>0 && m<=100)
44 {
45 for(i=0;i<m;i++)
46 scanf("%s",&dna[i].str);
47 for(i=0;i<m;i++)
48 {
49 res[i]=s(dna[i].str);
50 dna[i].key=res[i];
51 }
52 sort(res,m);
53 for(i=0;i<m;i++)
54 for(j=0;j<m;j++)
55 {
56 if(dna[j].key==res[i] )
57 {
58 printf("%s\n",dna[j].str);
59  dna[j].key=1000000;/*就是这个地方。。。原本是赋的0,那样逆序度为0 的情况就会有问题*/
60 }
61 }
62 }
63 return 0;
64 }

 

1104--DNA排序---闲来无事做水题啊

标签:

原文地址:http://www.cnblogs.com/xlzhh/p/4251559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!