在vs上编译没问题,poj上就编译错误
#include<iostream>
using namespace std;
int a[10005]={0};
int main(void)
{
int n; cin>>n;
while(n--)
{
int N,S;
cin>>N;
cin>>S;
for(int i=0;i<N;i++)cin>>a[i];//读入数据
int s=0,j=0,ans=N; //快慢指针
long long int sum=a[0];
while(j<N)
{
if(sum>=S)
{
if(j-s+1<ans)ans=j-s+1;
sum-=a[s];
s++;
if(s>j){sum=a[s]; j++;}
}
if(sum<S){j++; sum+=a[j];}
}
if(ans==N)
cout<<0<<endl;
else
cout<<ans<<endl;
}
return 0;
}
为什么复制别人的代码也是这个错误,自己代码也是
其实这是poj评测机磁盘空间不足了。。。(看看CE底下的英文就知道了,而且Status里面现在还一堆ce的。。。
代码的确没看出语法错误,你是不是选择编程语言的时候选错了,当作别的语言代码提交了。
真服了,我说怎么都是ce
【以下回答由 GPT 生成】
根据提供的代码,我看到主要的问题可能来自于代码中包含的数组越界访问错误。具体来说,在以下代码段中:
while(j<N)
{
if(sum >= S)
{
if(j-s+1 < ans)
ans = j-s+1;
sum -= a[s];
s++;
if(s > j)
{
sum = a[s];
j++;
}
}
if(sum < S)
{
j++;
sum += a[j];
}
}
在每次更新j
之后,没有进行边界检查,而是直接进行进一步的计算。这可能导致超出数组a
的索引范围。
为了解决这个问题,我们可以在更新j
之后,添加一行代码来检查j
是否超出了数组a
的索引范围。如果j
超出了索引范围,则退出while
循环。
下面是修改后的代码:
while(j<N)
{
if(sum >= S)
{
if(j-s+1 < ans)
ans = j-s+1;
sum -= a[s];
s++;
if(s > j)
{
sum = a[s];
j++;
}
}
if(sum < S)
{
j++;
if(j >= N) // 添加边界检查
break;
sum += a[j];
}
}
请尝试使用上述修改后的代码,并在POJ上进行编译测试,看看是否能够成功。如果您还遇到其他问题,请提供完整的错误信息,以便我们更好地帮助您解决问题。