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 hubo430 at 2005-06-09 16:01:51 on Problem 1007
小弟不才遇到了一道和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