用C语言指针调用,有n个数,使前面各数顺序向后移m个位置,最后m个数变成最前面m个数
时间: 2024-01-29 16:04:28 浏览: 65
这道题的解法可以应用数组的翻转思想来实现,具体步骤如下:
1. 以 m 为界限,将数组分为两部分,即前面的 n-m 个数和后面的 m 个数;
2. 将前面的 n-m 个数逆序排列;
3. 将后面的 m 个数逆序排列;
4. 将整个数组逆序排列。
代码实现如下:
```c
void reverse(int *arr, int start, int end) {
while (start < end) {
int temp = arr[start];
arr[start++] = arr[end];
arr[end--] = temp;
}
}
void move(int *arr, int n, int m) {
// 如果 m 大于等于 n,直接返回
if (m >= n) {
return;
}
// 将前面的 n-m 个数逆序排列
reverse(arr, 0, n - m - 1);
// 将后面的 m 个数逆序排列
reverse(arr, n - m, n - 1);
// 将整个数组逆序排列
reverse(arr, 0, n - 1);
}
```
其中,`arr` 是一个指向数组首元素的指针,`n` 是数组的长度,`m` 是要移动的位置数。这个函数的实现思路是先将数组分为前面的 n-m 个数和后面的 m 个数,然后分别将这两部分逆序排列,最后将整个数组逆序排列。这样就可以实现把前面各数顺序向后移m个位置,并把最后m个数变成最前面m个数。
阅读全文