C代码在ideone上运行良好,但在spoj中获得WA
在spoj中获得WA,在ideone上运行良好,用于测试用例。有什么想法吗? 早些时候我用java写的,是NZEC。这是用C写的C代码在ideone上运行良好,但在spoj中获得WA,c,C,在spoj中获得WA,在ideone上运行良好,用于测试用例。有什么想法吗? 早些时候我用java写的,是NZEC。这是用C写的 #include<stdio.h> int main(){ int n,i; scanf("%d",&n); long num[n]; for(i=0;i<n;i++){ scanf("%ld",&num[i]); } int flag; int l;
#include<stdio.h>
int main(){
int n,i;
scanf("%d",&n);
long num[n];
for(i=0;i<n;i++){
scanf("%ld",&num[i]);
}
int flag;
int l;
for(l=0;l<n;l++){
if(num[l+1] > num[l]){
flag = 1;
break;
}
else if(num[l+1] < num[l]){
flag = 0;
break;
}
}
int count = 1,k;
for(k =0; k<n-1; k++){
if(flag){
if (num[k+1] > num[k]){
count++;
flag = 0;
}
else if(num[k+1]==num[k]){
flag = 1;
}
else if(num[k+1]<num[k]){
//count++;
flag=1;
}
}
else{
if(num[k+1] < num[k]){
count++;
flag = 1;
}
else if(num[k+1]==num[k]){
flag = 0;
}
else if(num[k+1]>num[k]){
//count++;
flag = 0;
}
}
}
printf("%d",count);
return 0;
}
#包括
int main(){
int n,i;
scanf(“%d”和“&n”);
长数[n];
对于(i=0;i等等,这里有很多问题。
首先,这里有几个:
int n,i;
scanf("%d",&n);
long num[n];
不可能(或者至少不可能)声明某个变量大小的数组,请通过这样做来使用:
long* num = malloc(sizeof(long)*n);
另一个问题是,您在第一个循环中跨越了数组的边界,这很奇怪,因为您在第二个循环中处理了它:p
只需将:for(l=0;l
更改为for(l=0;l
,就像在IF语句中使用数组l+1元素一样,当l为n-1时,实际上是测试n-1元素与第n个元素的比较,第n个元素不在数组的边界内。
除此之外,代码似乎还行。这个问题与以下问题有很强的联系。通常会显示一个问题,用户需要提交代码,为测试输入提供预期的输出,并且是其中的一员。事实上,几乎所有问题都会显示示例输入和示例输出。因此,您的代码会给出相同的输出如中问题示例输入的示例输出中所示,但您的代码在在线判断中经过大量数据测试,这将导致NZEC。不要假设每个人都知道“WA”和“NZEC”的含义。我当然不知道。迷你SPOJ词汇表:SPOJ:Sphere online judge(编程问题/谜题/竞赛网站),WA:回答错误,NZEC:非零退出代码,TLE:时间限制Exceeded@MichaelBurr:我建议将其编辑到问题中。不建议使用IMOlong
,因为它在Windows上是32位,在大多数Linux/Unix实现中是64位。C标准只指定long至少有32位,您无法知道long
在法官的编译器中。假设它是64位可能会导致严重的溢出。如果你需要64位类型,你应该使用保证至少是64位的long
,或者在stdint.h
中使用int64\u t
。请注意,如果我没有读到上面MichaelBurr的评论,我会认为WA是警告。不要假设e每个人都知道您所说的Dvla从C99开始就可用,但您必须明确指定--std=C99
Lu'u-我知道,但它在原始版本中并不正确(在我的编译器中,您不需要指定--std=C99)我不确定哪个站点运行什么…是的,我的意思是如果你不确切知道编译器和编译标志,你不能假设任何事情。只使用保证的更好