《关于数组旋转的问题》

68 阅读1分钟
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int a[100];
    int n, k; //n表示数组元素的个数,k表示顺时针旋转次数(每旋转一次,将第一个元素放置队伍的末尾)。 
    cin >> n;
    for (int i = 0; i < n; i ++) 
    cin >> a[i];
    cin >> k;
    reverse(a, a + k);
    reverse(a + k, a + n);
    reverse(a, a + n); //注意reverse函数的区间为左闭右开。 //首先将数组的第一个元素到第k-1个元素逆序,接着使第k个元素至n - 1个元素逆序,最后让整个数组逆序,完成操作。 //原理为:(a0 a1 ... ak ... an) -> (ak-1 ak-2 ... a0 ak ... an) -> (ak-1 ak-2 ... a0 an ... ak) -> (ak ak+1 ... an a0 ... ak-1)。 
    for (int i = 0; i < n; i ++)
    cout << a << ' ';
    return 0;
}