编写一程序,将长度为n的一维数组各个元素向前移动 m 个位置,最前面的m 个元素变成最后面的m个数。要求:数据处理通过函数实现,数据输入输出在主函数中进行。 void shift(int*x, int n, int m) {}
时间: 2023-07-16 22:15:55 浏览: 100
有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.
以下是实现要求的程序:
```c++
#include <iostream>
using namespace std;
// 将长度为n的一维数组各个元素向前移动m个位置
void shift(int* x, int n, int m) {
m %= n; // 处理m大于n的情况
if (m == 0) return; // 特判m等于0的情况
int* temp = new int[m]; // 用于存放最前面的m个元素
for (int i = 0; i < m; i++) {
temp[i] = x[i];
}
for (int i = m; i < n; i++) {
x[i - m] = x[i];
}
for (int i = 0; i < m; i++) {
x[n - m + i] = temp[i];
}
delete[] temp;
}
int main() {
int n, m;
cout << "请输入数组长度n和移动的位置m:";
cin >> n >> m;
int* x = new int[n];
cout << "请输入数组元素:";
for (int i = 0; i < n; i++) {
cin >> x[i];
}
shift(x, n, m);
cout << "移动后的数组为:";
for (int i = 0; i < n; i++) {
cout << x[i] << ' ';
}
cout << endl;
delete[] x;
return 0;
}
```
函数shift接收三个参数,分别是指向待处理数组的指针x、数组长度n和向前移动的位置m。首先将m对n取模,处理m大于n的情况。然后,申请一个大小为m的动态数组temp,用于存放最前面的m个元素。接着,将数组x中的元素向前移动m个位置,最后将temp中的元素放到数组x的最后m个位置。最后,释放动态数组temp的空间。
在主函数中,首先输入数组长度n和移动的位置m,然后申请一个大小为n的动态数组x,并输入数组元素。调用shift函数,将数组x中的元素向前移动m个位置。最后,输出移动后的数组元素,并释放动态数组x的空间。
阅读全文