先翻转前n-m个,再翻转后m个,最后整个数组翻转
坑:m可能大于n,之前先处理m, m %= n
代码
#include<bits/stdc++.h>
using namespace std;
void reverse( int arr[], int begin, int end ){
for( int i = begin; i <= (begin+end)/2; i++ ){
int tmp = arr[i];
arr[i] = arr[end-i+begin];
arr[end-i+begin] = tmp;
}
}
int main(){
int n, m;
cin >> n >> m;
int arr[n];
for( int i = 0; i < n; i++ ){
cin >> arr[i];
}
m %= n;
reverse(arr, 0, n-m-1);
reverse(arr, n-m, n-1);
reverse(arr, 0, n-1);
int blank = 0;
for( int i = 0; i < n; i++ ){
if( blank == 1 ){
cout << " ";
}
cout << arr[i];
blank = 1;
}
return 0;
}