Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        3年前关闭。
                                                                                            
                
        
以下程序是针对链接中的问题的
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;
}

最佳答案

您有两个问题:


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


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

09-10 01:01
查看更多