POJ 1007 DNA Sorting——Output Limit Exceeded

这题本就是一道水题,但是让我弄出了 Output Limit Exceeded,起先没注意以为是自己的运行超时了,后来在优化下排序,发现不是如此。

最后才发现是,原来是最大数组长度是50,而且是字符串,而我真的设置了最大是50,造成最后字符数组尾部没有‘\0’,在输出的时候出问题了。


示例一:

#include <stdio.h>

#define LENGTH 3

int main(void)
{
    char a[3][LENGTH];
    printf("输入:\n");
    scanf("%s",a[0]);
    scanf("%s",a[1]);
    scanf("%s",a[2]);
    printf("输出:\n");
    printf("a[0]:%s\n",a[0]);
    printf("a[1]:%s\n",a[1]);
    printf("a[2]:%s\n",a[2]);
    getchar();
    getchar();
    return 0;
}

输出为:


示例二: 数组最后留出一个多余的 将length设置为4

#include <stdio.h>

#define LENGTH 4

int main(void)
{
	char a[3][LENGTH];
	printf("输入:\n");
    scanf("%s",a[0]);
	scanf("%s",a[1]);
	scanf("%s",a[2]);
	printf("输出:\n");
	printf("a[0]:%s\n",a[0]);
	printf("a[1]:%s\n",a[1]);
	printf("a[2]:%s\n",a[2]);
	getchar();
	getchar();
    return 0;
}

输出为:



最后附上这道题目的代码:

#include <stdio.h> 
#include <stdlib.h>

#define LENGTH 51 //开辟的数组的问题
#define N 100 //代表个数 与下面的m的意义相同



int comp ( const void *a, const void *b )
{
	return ( ( int * ) a ) [1] - ( ( int * ) b ) [1];
}


int main()
{
	int n,m; //n代表长度 m代表行数
	char arr[N][LENGTH];
	int arrNum[N][2];
	
	while (scanf("%d %d",&n,&m) != EOF)
	{
		int i,j,k,sum,tmp1,tmp2;
		
		if(n<=0 || n>50 || m<=0 ||m>100)
			break;
		for( i=0; i<m; i++)
		{
			arrNum[i][0] = i;
			sum = 0;
			scanf("%s",arr[i]);
			for( j=0; j<n; j++)
				for ( k=j; k<n; k++)
				{
					if(arr[i][j] > arr[i][k])
						sum++;
				}
			arrNum[i][1] = sum;
		}

		//qsort ( arrNum, i, sizeof ( int ) * 2, comp);
		for ( i=0; i<m; i++)
			for( j=i; j<m; j++)
			{
				if(arrNum[i][1] > arrNum[j][1])
				{
					tmp1 = arrNum[j][0]; 
					tmp2 = arrNum[j][1]; 
					arrNum[j][0] = arrNum[i][0];
					arrNum[j][1] = arrNum[i][1];
					arrNum[i][0] = tmp1;
					arrNum[i][1] = tmp2;
				}
			}
			for ( i=0; i<m; i++) 
			{
				printf("%s\n",arr[arrNum[i][0]]);
			}
	}
	return 0;
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值