这题本就是一道水题,但是让我弄出了 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;
}