PAT乙级1008——数组元素循环右移问题

题目:

题目详情 - 1008 数组元素循环右移问题 (20 分) (pintia.cn)

 

思路很简单,就是换一个顺序将原先数组里面的元素重新输出:

PAT乙级1008——数组元素循环右移问题

 

 

下面是我的代码:

#include <iostream>
using namespace std;
int main()
{
    int N=0,M=0;
    cin>>N>>M;
    
    int *a=new int [N];
    
    for (int i=0;i<N;i++)
    {
        cin>>a[i];  //读取n个数 
    }
    M%=N;
    cout<<a[N-M];
    for (int i=N-M+1;i<N;i++)
    {
        cout<<" "<<a[i];
    }
    for (int i=0;i<N-M;i++)
    {
        cout<<" "<<a[i];
    }
    return 0;
}

但是!!!

部分错误了!

 

还没有找出原因,下面贴一个其他回答:PAT乙级1008 - Another7 - 博客园 (cnblogs.com)

我看了他的具体回答,感觉跟我的思路是一样的,但是人家的就是正确的

#include<iostream>
using namespace std;
int main() {
    int n = 0;
    int m = 0;
    cin >> n >> m;
    int number[n];
    for (int i = 0; i < n; i++) {
        cin >> number[i];
    }
    // 如果右移的量比较大,甚至发生了循环了一遍一遍又一遍,此时对右移的量进行处理,使其在一遍循环之内
    m %= n;
    for (int i = n - m; i < n; i++) {
        cout << number[i] << " ";
    }
    for (int i = 0; i < n - m; i++) {
        if (i != n - m - 1) {
            cout << number[i] << " ";    
        } else {
            cout << number[i];
        }
    }
    cout << endl;
    return 0;
}

 

 

 

 

上一篇:PAT乙级-1011 A+B 和 C


下一篇:PAT 甲级 1056 Mice and Rice