c/c++编写程序,给定一组整数,用数组保存整数,实现对数组中的数循环移动。假定共有n个整数,则要使前面各数顺序向后移m个位置,并使最后m个数变为最前面的m个数。
时间: 2024-05-09 19:14:39 浏览: 98
C++程序设计练习(2) Online Judge
好的,这是一个经典的数组旋转问题。下面是一个 C 语言的实现:
```c
#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--;
}
}
void rotate(int arr[], int n, int m) {
m %= n;
reverse(arr, 0, n - 1);
reverse(arr, 0, m - 1);
reverse(arr, m, n - 1);
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int m = 2;
rotate(arr, n, m);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
这个程序首先定义了一个 `reverse` 函数,用于反转数组中指定区间的元素。接着定义了一个 `rotate` 函数,用于将数组循环移动 m 个位置。具体做法是先将整个数组反转,然后将前 m 个元素反转,再将后面的 n-m 个元素反转,最后得到的数组即为所求。最后在 `main` 函数中进行了测试。
阅读全文