PAT1008 陣列元素迴圈右移問題(java實現)

TNTZS666發表於2019-01-16

題目地址:https://pintia.cn/problem-sets/994805260223102976/problems/994805316250615808

題目描述:

一個陣列A中存有N(N>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(M>=0)個位置,即將A中的資料由(A0A1……AN-1)變換為(AN-M …… AN-1 A0 A1……AN-M-1)(最後M個數迴圈移至最前面的M個位置)。如果需要考慮程式移動資料的次數儘量少,要如何設計移動的方法?

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

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


解題思路:
這道題沒有什麼難點,只是要知道輸出的陣列順序從哪個下標開始就好了

易錯點:如果M>N的時候輸出的效果應該2N-M效果一樣


程式:

import java.util.Scanner;

public class Main{
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int M = sc.nextInt();
		int a[] = new int[N];
		for (int i = 0; i < N; i++) {
			a[i] = sc.nextInt();
		}
		int flag = N - M;	//flag變數用來記錄從哪個下標開始遍歷陣列
		if (N - M >= 0) {
			flag = N - M;
		} else {
			flag = 2 * N - M;
		}
		if (flag > 0) {
			for (int i = flag; i < N; i++) {
				System.out.print(a[i] + " ");
			}
			for (int i = 0; i < flag; i++) {
				if (i == flag - 1) {
					System.out.print(a[i]);
				} else {
					System.out.print(a[i] + " ");
				}
			}
		} else {		//flag為0的時候要特別關注
			for (int i = flag; i < N; i++) {
				if (i == N - 1) {
					System.out.println(a[i]);
				} else {
					System.out.print(a[i] + " ");
				}
			}
		}

	}
}


相關文章