编写一程序,将长度为n的一维数组各个元素向前移动m个位置,最前面的m个元素变成 最后面的m个数。 要求:数据处理通过函数实现,数据输入输出在主函数中进行 void shift(int *x, int n, int m)
时间: 2023-11-22 21:54:00 浏览: 75
以下是您需要的程序:
```c++
#include <iostream>
using namespace std;
void reverse(int *arr, int start, int end) {
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
void shift(int *x, int n, int m) {
// 如果 m 大于 n ,取模运算使 m 小于 n
m %= n;
// 先翻转整个数组
reverse(x, 0, n - 1);
// 再翻转前面 m 个数
reverse(x, 0, m - 1);
// 最后翻转后面 n-m 个数
reverse(x, m, n - 1);
}
int main() {
int n, m;
cout << "请输入数组长度n和向前移动的位置m:" << endl;
cin >> n >> m;
int *arr = new int[n];
cout << "请输入" << n << "个整数:" << endl;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
shift(arr, n, m);
cout << "移动后的数组为:" << endl;
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
delete[] arr;
return 0;
}
```
函数 `shift` 将数组翻转三次,分别翻转整个数组、前面 m 个数和后面 n-m 个数。这样可以实现向前移动 m 个位置的功能。
阅读全文