要求不能使用额外的数组,那我就申请两倍于数组元素个数大小的数组。。虽然这样好像不遵守题意,但我觉得本质上的思想是一样的。。所以也就凑活凑活了。。
#includeint main() { int n,move,i,j; scanf("%d%d",&n,&move); int array[2*n]; for(i = 0;i < n;i++){ scanf("%d",&array[i]); array[n+i] = array[i]; } j = n-move%n; for(i = 0;i < n;i++){ printf("%d",array[j++]); if(i != n-1) printf(" "); } }
代码的思路可以用以下这个例子解释:
0 1 2 3 4 5(数组元素序号)
1 2 3 4 5 6 1 2 3 4 5 6(创建的两倍长度的数组)
6 1 2 3 4 5(移动一位)
5 6 1 2 3 4(移动两位)
可以看到当移动1位时,就是从第一个数组中的下标为5的元素开始往后输出6个元素
同理当移动2位时,从第一个数组中下标为4的元素开始往后输出6个元素
可以知道1+5=6,2+4=6
接下来只需要利用这个互补于长度的关系转化为代码就好了(再多考虑一下移动次数超过数组长度的可能,移动次数对长度取余就行了)



