数组循环右移问题
//数组元素循环右移
int main() {
int N = 8, M = 3; //数组中有8个元素 循环右移3个
int a[8] = { 1,2,3,4,5,6,7,8 };
M = M % N; //无法确定M比N小 取余
int temp;
//先将下标为N-M的元素用temp继承 这样就多出来了一个空位
//再把将要移动到这个位置的元素直接赋值过来
//也就是说 下标N-M的元素一直被temp保存着 所以数组中一直有一个空位方便下一个移动到此处的元素移过来
int d;
int i;
for (i = 1; i <= M && i <= N; ++i) { //求最大公约数
if (M%i == 0 && N%i == 0) {
d = i;
}
}
int next; //下一个要变成空位的位置
int pos; //保存初始位置
for (i = N - M; i <= N - M + d - 1; ++i) {
temp = a[i];
pos = i; //pos 保存空白位置
next = (i - M + N) % N;
while (i != next) { //初始位置和下一趟要移动的位置不同时
a[pos] = a[next];
pos = next;
next = (pos - M + N) % N;
}
a[pos] = temp;
}
for (i = 0; i < N; ++i) {
printf("%d ", a[i]);
}
}