【PAT】【1008】數組元素循環右移問題

【1008】

代碼來源:

https://www.liuchuo.net/archives/522

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;
    vector<int> a(n);
    for (int i = 0; i < n; i++)
        cin >> a[i];
    m %= n;
    if (m != 0) {
        reverse(begin(a), begin(a) + n);
        reverse(begin(a), begin(a) + m);
        reverse(begin(a) + m, begin(a) + n);
    }
    for (int i = 0; i < n - 1; i++)
        cout << a[i] << " ";
    cout << a[n - 1];
    return 0;
}

要點:

比如有4(N)個數是:1,2,3,4

向右移2(M)位,變成了:3,4,1,2

向右移3(M)位,變成了:2,3,4,1 

那若將原數組倒置:4,3,2,1

移2位的時候,就是把前2(M)位倒置,再把後(N-M)2位倒置即可

移3位的時候,就是把前3(M)位倒置,再把後(N-M)1位倒置即可

規律就是先把原數組倒置,然後把前N位倒置,再把後N-M位倒置,

然後細節就是移位大於N時將M%=N

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章