以下程序用于链接中的问题 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;
}
答案 0 :(得分:1)
你有两个问题:
在声明之前调用sortmark
函数。将原型移动到调用之前(即在main
函数之前)。
sortmark
函数的原型与您调用它的方式不符。你说它需要int
参数,但是将long long int
参数传递给函数。 int
类型通常为32位,即使在64位系统上也是如此,而long long int
保证至少为64位。这意味着在调用函数时可能会丢失一半的位,从而导致将非常奇怪的值传递给函数。
第一个问题应该是给你一个编译器警告。当你修复了第二个问题会给你另一个编译器警告。编译器警告对于修复非常重要,因为它们通常表示与您的混合类型一样的情况。如果第一个问题没有给你一个警告,那么你需要提高编译器的警告级别。