
本题是正好学到了数据结构中倒置右移的方法,就是倒置右边,再倒置左边,最后整个数组倒置,右移和左移的区别是倒置的分界点,然后本题还有一个坑的地方是,m有可能比n大,需要m=m%n,否则会出现答案错误,下面是完整的代码
#include<iostream>
using namespace std;
void reverse(int a[],int left,int right,int k ) {
int temp;
for (int i = left, j = right; j < left + k && i < j; ++i, --j) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
void move(int a[], int n, int p) {
reverse(a, 0, n - p - 1, n-p);
reverse(a, n - p, n - 1, p);
reverse(a, 0, n - 1, n);
}
int main() {
int n, m,a[100];
cin >> n >> m;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
move(a, n, m);
for (int i = 0; i < n; i++) {
if (i == 0) {
cout << a[i];
}
else
cout << " " << a[i] ;
}
cout << endl;
return 0;
}
482

被折叠的 条评论
为什么被折叠?



