代码如下:
#include <stdio.h>
// 函数声明
void rotateArray(int arr[], int n, int m);
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7};
int n = sizeof(arr) / sizeof(arr[0]);//获取数组中元素的个数
int m = 2; // 例如移动2位
// 输出原始数组
printf("原始数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 旋转数组
rotateArray(arr, n, m);
// 输出旋转后的数组
printf("旋转后的数组:\n");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
// 函数定义
void rotateArray(int arr[], int n, int m) {
// 确保m在有效范围内
m = m % n; // 如果m大于n,则取余数
// 使用额外的数组来存储前m个元素(可选,但可以使代码更清晰)
int temp[m];
for (int i = 0; i < m; i++) {
temp[i] = arr[i];
}
// 将剩余的元素向前移动m位
for (int i = m; i < n; i++) {
arr[i - m] = arr[i];
}
// 将前m个元素放到数组末尾
for (int i = 0; i < m; i++) {
arr[n - m + i] = temp[i]; //从末尾开始往前数第 i 个位置的索引
}
}