Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

不要用选择排序,冒泡

Posted by xfxyjwf at 2005-06-09 16:10:21 on Problem 1007
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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator