第一次用POJ,求告知为什么会编译错误,

在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;
}

为什么复制别人的代码也是这个错误,自己代码也是

img

其实这是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上进行编译测试,看看是否能够成功。如果您还遇到其他问题,请提供完整的错误信息,以便我们更好地帮助您解决问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^