1008 数组元素循环右移问题 (20 分)
想法就是将数组分成(A ,B)两部分,B的长度就是右移的长度。先求A的逆置,B的逆置,得到(A逆,B逆),在对整体求逆,最后得出(A逆,B逆)逆。
代码如下:
#include <stdio.h>
#include <stdlib.h>
void reverse(int *array,int low,int high);
int main()
{
int N;
int M;
int *array;
int i;
scanf("%d%d",&N,&M);
M %= N;
array = (int *)malloc(sizeof(int) * N);
for(i = 0; i < N; i++)
{
scanf("%d",array + i);
}
if(M)
{
reverse(array,0,N - M -1);
reverse(array,N - M, N - 1);
reverse(array,0,N - 1);
}
for(i = 0; i < N; i++)
{
printf("%d",array[i]);
if(i != N-1)
putchar(' ');
}
return 0;
}
//单次求逆的过程
void reverse(int *array,int low,int high)
{
int m = (low + high) / 2 - low;
int i,t;
for(i = 0; i <= m; i++)
{
t = array[low + i];
array[low + i] = array[high - i];
array[high - i] = t;
}
}