PAT乙級 1008

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;
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章