c - 哪些测试用例的代码出错了?

标签 c sorting structure

以下程序适用于链接中的问题 https://www.codechef.com/problems/ENTEXAM

但是提交后软件显示错误答案。我测试了几个案例并得到了正确的答案。我错过了任何极端情况吗?

 #include<stdio.h>

struct student
{
    long long int E[4],tot;
}stud[10001];

int main()
{
    long long int T,i;
    scanf("%d",&T);
    for(i=0;i<T;i++)
    {   
        long long int N,K,E,M,j;
        scanf("%lld%lld%lld%lld",&N,&K,&E,&M);
        for(j=0;j<N-1;j++)
        {   long long int k;
            stud[j].tot=0;
            for(k=0;k<E;k++)
            {
                scanf("%lld",&stud[j].E[k]);
                stud[j].tot=stud[j].tot+stud[j].E[k];
            }
        }
        sortmark(N);
        long long int k;
        stud[N-1].tot=0;
        for(k=0;k<E-1;k++)
        {
            scanf("%lld",&stud[N-1].E[k]);
            stud[N-1].tot=stud[N-1].tot+stud[N-1].E[k];
        }
        long long int diff;
        diff=stud[K-1].tot-stud[N-1].tot+1;
        if(diff<0) diff=0;
        if(diff<=M&&diff>0)
        printf("%lld\n",diff);
        else printf("impossible\n");
    }

    return 0;
}

int sortmark(int);
int sortmark(int N)
{
    long long int i,j,temp;
    for(i=0;i<N-1;i++)
    {
        temp=stud[i].tot;
        for(j=i;j>0&&stud[j-1].tot<stud[j].tot;j--)
        {
            stud[j].tot=stud[j-1].tot;
            stud[j-1].tot=temp;
        }
        stud[j].tot=temp;
    }
    return 0;
}

最佳答案

您有两个问题:

  1. 在声明之前调用 sortmark 函数。将原型(prototype)移至调用之前(即 main 函数之前)。

  2. sortmark 函数的原型(prototype)与您的调用方式不匹配。您说它接受一个 int 参数,但将一个 long long int 参数传递给函数。 int 类型通常为 32 位,即使在 64 位系统上也是如此,而 long long int 则保证至少为 64 位。这意味着调用函数时您可能会丢失一半的位,从而导致传递给函数的值非常奇怪。

第一个问题应该给你一个编译器警告。当你解决这个问题时,第二个问题会给你另一个编译器警告。修复编译器警告非常重要,因为它们通常表明与您的混合类型类似的情况。如果第一个问题没有给你警告,那么你需要提高编译器的警告级别。

关于c - 哪些测试用例的代码出错了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38284926/

相关文章:

c - epoll_wait 由于 EINTR 而失败,如何补救?

c - 在c中使用qsort进行排序

c - 如何创建三维动态数组,其中维度之一在c编译时已知

c - C中的结构内存对齐

c - 用 strcmp() 解释这个用于字符串比较的 C 宏

c - 函数参数的 IN 部分是什么?

C 读取由空格分隔且字长不受限制的文本文件

java - 以同样的方式对2个数组进行排序

python - 按日期时间对象对 numpy 数组进行排序

C++ 将txt文件逐行读取到结构数组中的char数组中