将长度为 n 的序列 a 中各元素依次顺序循环右移 m 个位置。如:序列 a={1,3,5,7,9,11},若 m = 2,则循环右移后的结果为
a={11,9,1,3,5,7}。
大佬的做法:字符串循环移动-高效优雅算法
#include<stdio.h>
void move(int *a, int n, int m)
{
int *p, k, temp;
for(k=1; k<=m; k++)
{
// 保存序列的最后那个元素
temp=*(a+n-1);
for(p=a+n-1; p>a; p--)
*p=*(p-1);
*a=temp;
}
}
int main()
{
int i;
int a[6] = {1,3,5,7,9,11};
move(a,6,2);
for(i=0; i<6; i++)
printf("%d ",*(a+i));
return 0;
}
运行结果: