Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
哪位高手指点一下啊小弟不才遇到了一道和1007相似的题目,但就是通不过. 题目是这样的: 一种度量序列的“无序度”的方法是计算序列中的逆序元素对的数目。比如,对字母序列“DAABEC”来说,“无序度”为5,因为“D”的右边有4个字母比D“小”(即在字母表中应该排在D前面),“E”的右边有1个字母比E小。相应地,序列“AACEDGG”的无序度为1(只有“E”和“D”为逆序元素对)“ZWQM”的无序度为6。 你的任务是对一些DNA的字母序列按无序度进行排序(DNA字母序列只含A T G C四种字母),无序度小的序列排在前面。 输入 输入由多组测试数据组成。每组测试数据的第一行为两个数n和m,0<n<=50,0<m<=100。n表示每个序列的长度(同一组测试数据中各序列的长度都为n),m表示此组测试数据中的序列个数。接下来有m行,每行为一个长度为n的DNA字母序列。 输出 对于每组测试数据,输出排序后的序列列表。在排序时,无序度小的序列排在前面。如果两个序列的无序度相等,那么它们在列表中出现的顺序和它们在输入中的顺序相同。 在每组测试数据后输出一行“********************”(二十个星号)。 输入示例 3 3 ACG CGT AGT 6 2 TAAAAA ATAAAA 输出示例 ACG CGT AGT ******************** ATAAAA TAAAAA ******************** 我的程序是这样的: #include<stdio.h> #include<iostream.h> #include<string.h> int main() { int len,num,i,j,b[100],t,e; char a[100][51],c[51],ch; while(scanf("%d%d",&len,&num)==2) { ch=getchar(); for(i=0;i<num;i++) {scanf("%s",a[i]);ch=getchar();} for(i=0;i<num;i++) { b[i]=0; for(j=0;j<=len-2;j++) for(t=j+1;t<=len-1;t++) if(a[i][j]>a[i][t]) b[i]++; } for(i=0;i<=num-2;i++) for(j=i+1;j<=num-1;j++) if(b[i]>b[j]) {strcpy(c,a[i]);strcpy(a[i],a[j]);strcpy(a[j],c);e=b[i];b[i]=b[j];b[j]=e;} for(i=0;i<num;i++) cout<<a[i]<<endl; for(i=0;i<20;i++) cout<<"*";cout<<endl; } return 0; } 希望哪位高手能指点一下,小弟不胜感激 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator