要实现循环右移,可以利用位运算和取余来完成。下面是一个示例代码:
#include <stdio.h>
void rightRotate(int *arr, int n, int k) {
k = k % n;
for(int i = 0; i < k; i++) {
int temp = arr[n-1];
for(int j = n-1; j > 0; j--) {
arr[j] = arr[j-1];
}
arr[0] = temp;
}
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 2;
rightRotate(arr, n, k);
for(int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
在这个示例中,我们定义了一个rightRotate
函数,它接受一个整型数组arr
、数组长度n
和右移位数k
作为参数。首先对k
取余确保k
在n
的范围内,然后循环执行右移操作。在右移过程中,我们先保存最后一个元素的值,然后依次将前面的元素向后移动一位,最后将保存的值放到第一个位置。最后在main
函数中调用rightRotate
函数并打印结果。