约瑟夫环能执行但在pta上过不去

img

#include<iostream>
using namespace std;
int main(){
    int N,p,i=0,j=0,a[3000]={0},q=0;
    cin>>N>>p;
    while(j!=N){
        i++;
        if(i>N){
            i=1; 
        }
        if(a[i]==0){
            q++;
            if(q==p)
            {
                a[i]=1;
                j++;
                cout<<i<<" ";
                q=0;
            }
        }
    }
    return 0;
} 

```c++
能输出正确结果,但在pta上执行是多种错误,求解

修改如下,供参考对照:

#include<iostream>
using namespace std;
int main(){
    int N,p,i=0,j=0,a[3000]={0},q=0;
    cin>>N>>p;
    while(j!=N){
        if(a[i]==0){
            q++;
            if(q==p)
            {
                if(j == 0) cout<<i+1;
                else       cout<<" "<<i+1;
                a[i]=1;
                j++;
                q=0;
            }
        }
        i++;
        if(i>=N) i=0;
    }
    return 0;
}

if(j == 0) cout<<i+1;
                else       cout<<" "<<i+1;

请问这里是什么意思呢