数组元素循环右移执行能出结果但pta出现多种错误是为什么呢?

img


#include<iostream>
using namespace std;
int main(){
    int N,M,a[100];
    cin>>N>>M;
    for(int i=0;i<N;i++){
        cin>>a[i];
    }
    for(int i=N-M;i<N;i++){
        cout<<a[i]<<" ";
    }
    for(int i=0;i<N-M;i++){
        cout<<a[i]<<" ";
    }
    return 0;
}

img
执行是可以出结果的,但是为什么pta上会出现这样的情况呢?


#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    int a[110];
    for(int i=1;i<=n;i++) cin>>a[i];
    int end=n-m;
    int p;
    for(int i=1-m;i<=end;i++)
    {
        p=i%n;
        if(p<=0) p+=n;
        cout<<a[p]<<" ";
    }
    return 0;
}

模拟循环队列,然后伪换置