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 |
不要用选择排序,冒泡In Reply To:哪位高手指点一下啊 Posted by:hubo430 at 2005-06-09 16:01:51 > 小弟不才遇到了一道和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