当前位置:编程学习 > C/C++ >>

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;  
}  

 

 
补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,