4、有n个整数,使其前面各数顺序向后移m个位 置,最后m个数变成最前面的m个数。
时间: 2024-04-30 10:24:31 浏览: 121
这道题可以用三次翻转来解决。
首先将前n-m个数翻转,然后将后m个数翻转,最后将整个数组翻转即可。
以下是代码实现:
```python
def rotate(nums, m):
n = len(nums)
m %= n
reverse(nums, 0, n-m-1)
reverse(nums, n-m, n-1)
reverse(nums, 0, n-1)
def reverse(nums, start, end):
while start < end:
nums[start], nums[end] = nums[end], nums[start]
start += 1
end -= 1
```
举个例子,假设输入为 `[1, 2, 3, 4, 5]`,`m=2`,则经过一次翻转后得到 `[4, 5, 1, 2, 3]`,再经过两次翻转得到 `[3, 4, 5, 1, 2]`,即为最终结果。
相关问题
有n个整数,使其前面各数顺序向后移m个位 置,最后m个数变成最前面的m个数。
这个问题可以通过三次翻转来解决。
首先,将前n-m个数翻转。
然后,将后m个数翻转。
最后,将整个数组翻转。
下面是详细的步骤:
1. 定义一个函数reverse,用于翻转数组中指定范围的元素。
```
void reverse(int arr[], int start, int end) {
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
```
2. 在主函数中,先将前n-m个数翻转。
```
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
int n = sizeof(arr) / sizeof(arr[0]);
int m = 3;
reverse(arr, 0, n-m-1);
```
3. 然后将后m个数翻转。
```
reverse(arr, n-m, n-1);
```
4. 最后将整个数组翻转。
```
reverse(arr, 0, n-1);
```
完整代码如下:
```
#include <stdio.h>
void reverse(int arr[], int start, int end) {
while (start < end) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
start++;
end--;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8};
int n = sizeof(arr) / sizeof(arr[0]);
int m = 3;
reverse(arr, 0, n-m-1);
reverse(arr, n-m, n-1);
reverse(arr, 0, n-1);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
输出结果为:6 7 8 1 2 3 4 5
有n个整数,使前面各数顺序向后移m个位置,最后m个数变成最前面m 个数C++
可以使用循环移位的方法来实现这个问题。具体步骤如下:
1. 定义一个长度为n的整型数组a,并初始化它的元素值。
2. 定义一个整型变量m表示向后移动的位数。
3. 将数组a中前n-m个元素向后移动m个位置,把最后m个元素移到数组a的最前面。
4. 输出移位后的数组a。
以下是C++实现代码:
```c++
#include <iostream>
using namespace std;
int main() {
int n, m;
cout << "请输入整数个数n和向后移动的位数m:";
cin >> n >> m;
// 初始化数组a
int a[n];
for (int i = 0; i < n; i++) {
a[i] = i + 1;
}
// 循环移位
for (int i = 0; i < m; i++) {
int temp = a[n - 1];
for (int j = n - 1; j > 0; j--) {
a[j] = a[j - 1];
}
a[0] = temp;
}
// 输出移位后的数组a
cout << "移位后的数组a:";
for (int i = 0; i < n; i++) {
cout << a[i] << " ";
}
cout << endl;
return 0;
}
```
例如,当输入n=8、m=3时,程序的输出结果为:
```
请输入整数个数n和向后移动的位数m:8 3
移位后的数组a:6 7 8 1 2 3 4 5
```
阅读全文