PAT_B_1008 數組元素循環右移問題

題目描述:數組

一個數組A中存有N(>0)個整數,在不容許使用另外數組的前提下,將每一個整數循環向右移M(≥0)個位置,即將A中的數據由(A​0​​ A​1​​ ⋯A​N−1​​ )變換爲(A​N−M​​ ⋯A​N−1​​ A​0​​ A​1​​ ⋯A​N−M−1​​ )
(最後M個數循環移至最前面的M個位置)。若是須要考慮程序移動數據的次數儘可能少,要如何設計移動的方法?

輸入格式:
每一個輸入包含一個測試用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個整數,之間用空格分隔。

輸出格式:
在一行中輸出循環右移M位之後的整數序列,之間用空格分隔,序列結尾不能有多餘空格。

輸入樣例:
6 2
1 2 3 4 5 6
輸出樣例:
5 6 1 2 3 4

本人AC代碼:測試

//  將數組右移兩位
//  經過控制數組的下標來輸出元素

# include <stdio.h>

int main(void) 
{
	int n, temp; //  n爲輸入的總長度,temp爲須要移動的位數
	int A[100]; 
	int flag = 0;
	int i, k;
	
	scanf("%d %d",&n, &temp);
	temp = temp%n;
	
	//  輸入數組元素 
	for (i=0; i<n; i++)
	{
		scanf("%d",&A[i]);
	}
/*	
	//  輸出元素, 方法一 
	for (i=0; i<n; i++) 
	{
		if (i<temp)
			flag = 1;
		else
			flag = 0;
		
		if (flag == 1)
		{
			k = n-temp+i;  //   輸出 5 6 
		}
		else
		{
			k = i-temp;   // 輸出 1 2 3 4 
		}
		printf("%d",A[k]);
		if (i+1 != n)
		{
			printf(" ");
		}
	}
*/
	//  輸出元素,方法二
	
	for (i=0; i<n; i++) 
	{
		k = (i+n-temp)%n;
		printf("%d",A[k]);
		
		if (i+1 != n)
		{
			printf(" ");
		}
	}
			
	return 0;
}
相關文章
相關標籤/搜索