http://www.spoj.com/problems/MORENA/ 对于测试用例,在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;
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;
}
答案 0 :(得分:1)
等什么,这里有很多问题。 这里有几个,第一个:
int n,i;
scanf("%d",&n);
long num[n];
不可能(或者至少不可能)以某个变量的大小声明一个数组,通过这样做来使用malloc():
long* num = malloc(sizeof(long)*n);
另一个问题是你在第一个循环中越过数组的边界,这很奇怪,因为你在第二个循环中处理它:P
只需将for(l = 0 ; l < n ; l++)
更改为for(l = 0 ; l < n-1 ; l++)
,就像在IF语句中使用数组l + 1元素一样,当l为n-1时,实际测试n-1个元素与第N个元素相比 - 这不是& #39; t在数组的边界。
除此之外,代码似乎还可以。
答案 1 :(得分:0)
这个问题与competitive programming有很强的联系。通常会显示一个问题,并且用户需要提交代码,该代码为online judge的测试输入提供预期输出,并且SPOJ是其中之一。实际上有样本输入和样本输出显示几乎所有问题。因此,您的代码将为ideone中问题的示例输入的示例输出中显示相同的输出,但您的代码在在线判断中会对大量数据进行测试,这将导致NZEC。