C语言要求实现一个对数组进行循环右移的简单函数:一个数组a中存有n(>0)个整数,将每个整数循环向右移m(≥0)个位置,即将a中的数据由(a0a1...an-1)变换为(an-m...an-1a0a1...an-m-1)最后m个数循环移至最前面的m个位置)。 输入样例:
时间: 2024-03-13 10:47:17 浏览: 17
可以使用如下的 C 语言代码实现对数组进行循环右移:
```c
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 numsSize, int k){
if (k == 0 || numsSize == 1) {
return;
}
k = k % numsSize;
reverse(nums, 0, numsSize - k - 1);
reverse(nums, numsSize - k, numsSize - 1);
reverse(nums, 0, numsSize - 1);
}
```
对于输入样例,可以这样调用函数:
```c
int nums[] = {1, 2, 3, 4, 5};
int numsSize = sizeof(nums) / sizeof(nums[0]);
int k = 2;
rotate(nums, numsSize, k);
for (int i = 0; i < numsSize; i++) {
printf("%d ", nums[i]);
}
// 输出 4 5 1 2 3
```
上述代码中,我们首先定义了一个 `reverse` 函数来对数组的一部分进行翻转,并且在 `rotate` 函数中,先将数组的前部分翻转,再将数组的后部分翻转,最后将整个数组翻转,从而实现对数组的循环右移。