c语言用指针实现:有 n 个整数,使前面各数顺序后移 m 个位置,最后 m 个数变成最前面 m 个数, 写一函数完成以上功能,在主函数中输入 n 个整数和输出调整后的 n 个数。
时间: 2024-03-11 10:49:16 浏览: 29
好的,这是一个经典的数组旋转问题。这里给出一个用指针实现的解法。
```c
#include <stdio.h>
void rotate(int *nums, int n, int m) {
// 后面 m 个数先翻转
for (int i = n - m; i < n - m + m / 2; i++) {
int t = *(nums + i);
*(nums + i) = *(nums + n - m + m - 1 - i + n - m);
*(nums + n - m + m - 1 - i + n - m) = t;
}
// 前面 n-m 个数翻转
for (int i = 0; i < (n - m) / 2; i++) {
int t = *(nums + i);
*(nums + i) = *(nums + n - m - 1 - i);
*(nums + n - m - 1 - i) = t;
}
// 整个数组翻转
for (int i = 0; i < n / 2; i++) {
int t = *(nums + i);
*(nums + i) = *(nums + n - 1 - i);
*(nums + n - 1 - i) = t;
}
}
int main() {
int n, m;
printf("请输入 n 和 m:");
scanf("%d%d", &n, &m);
int nums[n];
printf("请输入 %d 个整数:", n);
for (int i = 0; i < n; i++) {
scanf("%d", &nums[i]);
}
rotate(nums, n, m);
printf("调整后的 %d 个数为:", n);
for (int i = 0; i < n; i++) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
```
该解法先将数组的后面 m 个数翻转,然后再将前面 n-m 个数翻转,最后再将整个数组翻转。这样就能实现循环移动的效果了。