C语言 有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数.重新排好序的数仍然要存在原来的数组中,但可以利用其它数组作为临时转存空间,也可以直接在原数组中重排。 用指针、函数完成。
时间: 2024-03-12 07:47:32 浏览: 70
C语言程序设计100个经典例子-含答案.pdf
好的,这是一个比较典型的数组旋转问题,可以使用三次翻转法来解决。下面是具体的代码实现:
```c
#include <stdio.h>
void reverse(int* nums, int start, int end) {
while (start < end) {
int temp = nums[start];
nums[start] = nums[end];
nums[end] = temp;
start++;
end--;
}
}
void rotate(int* nums, int n, int m) {
m = m % n;
reverse(nums, 0, n - m - 1);
reverse(nums, n - m, n - 1);
reverse(nums, 0, n - 1);
}
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("移动后的结果为:");
for (int i = 0; i < n; i++) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
```
代码解释:
1. 定义了一个`reverse`函数,用来翻转指定范围内的数组元素。
2. 定义了一个`rotate`函数,用来实现数组旋转操作,该函数中使用了三次翻转法。
3. 在`main`函数中,首先读入数字个数`n`和向后移动的位置`m`,然后读入`n`个数字存储到数组中。
4. 调用`rotate`函数实现数组旋转操作。
5. 最后输出移动后的结果。
注意事项:
1. 代码中使用了动态数组,需要在编译时开启对应的选项,如`-std=c99`。
2. 由于本题中要求使用指针和函数完成,因此代码中使用了指针来访问数组元素,使用函数来实现数组旋转操作。
阅读全文