数组循环右移加强版pta
时间: 2023-06-27 17:06:03 浏览: 177
数据结构之数组循环右移
这道题目的主要思路是使用三次翻转操作来实现数组循环右移。
具体操作如下:
1.将整个数组进行翻转
2.将前k个元素进行翻转
3.将剩下的元素进行翻转
其中,k为右移的位数,可以通过k对数组长度取模得到。
以下是代码实现:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
void reverse(vector<int>& nums, int start, int end) {
while (start < end) {
swap(nums[start], nums[end]);
start++;
end--;
}
}
void rotate(vector<int>& nums, int k) {
int n = nums.size();
k = k % n;
reverse(nums, 0, n - 1);
reverse(nums, 0, k - 1);
reverse(nums, k, n - 1);
}
int main() {
int n, k;
cin >> n >> k;
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
rotate(nums, n - k);
for (int i = 0; i < n; i++) {
cout << nums[i];
if (i != n - 1) {
cout << " ";
}
}
return 0;
}
```
输入格式:
第一行包含两个整数n和k,表示数组长度和右移的位数。
第二行包含n个整数,表示数组的元素。
输出格式:
输出经过右移操作后的数组,每个元素之间用空格隔开。
阅读全文