Array Sequential Swap Processor


Submit solution

Points: 10 (partial)
Time limit: 1.0s
Memory limit: 64M

Authors:
Problem type
Allowed languages
Java 19, Java 8

題目說明

本題目要求實作一個針對 Array 進行連續性 Swap 操作的程序。系統將給定一個長度為 n 的 Array,以及一組包含 k 個 Index 的序列。程式必須依照該序列的順序,執行 $k-1$ 次 Swap 操作。 具體邏輯如下: 假設 Index 序列為 i0, i1, i2, ..., i{k-1}

  1. 第一次操作:Swap 陣列中 Index 為 i0i1 的兩個元素。

  2. 第二次操作:Swap 陣列中 Index 為 i1i2 的兩個元素。

  3. 依此類推,直到執行最後一次操作:Swap 陣列中 Index 為 i {k-2}i {k-1} 的兩個元素。

本題已提供主程式框架,考生必須完成三個指定的 Method:getFirstIndexgetSecondIndex 以及 swapAndDisplay。請注意,雖然 swapAndDisplay 名稱中包含 Display,但根據主程式結構,最終的結果輸出由 main 函數負責,該函數僅需確保 Array 內的元素順序在執行後符合邏輯。

樣板程式碼:

import java.util.Scanner;

public class ArraySwapProcessor {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 1. 初始化原始陣列
        int n = sc.nextInt();
        int[] dataArray = new int[n];
        for (int i = 0; i < n; i++) {
            dataArray[i] = sc.nextInt();
        }

        // 2. 初始化索引陣列 (k 個要交換的位置)
        int k = sc.nextInt();
        int[] indexArray = new int[k];
        for (int i = 0; i < k; i++) {
            indexArray[i] = sc.nextInt();
        }

        // 3. 循序處理交換邏輯,交換次數為 k-1 次
        for (int j = 0; j < k - 1; j++) {
            // 呼叫第一個函數:取得本次要交換的兩個位置
            int pos1 = getFirstIndex(indexArray, j);
            int pos2 = getSecondIndex(indexArray, j);

            // 呼叫第二個函數:執行交換
            swapAndDisplay(dataArray, pos1, pos2);
        }

        // 輸出最終陣列狀態
        for (int m = 0; m < dataArray.length; m++) {
            System.out.print(dataArray[m] + " ");
        }
    }

    // 函數一:取得目前進度下的第一個索引位置
    public static ... getFirstIndex(...) {
        ...
    }

    // 函數一之二:取得目前進度下的第二個索引位置
    public static ... getSecondIndex(...) {
        ...
    }

    // 函數二:執行交換並直接輸出陣列內容
    public static ... swapAndDisplay(...) {
        ...
    }
}

輸入值的格式

  • 第一行輸入一個正整數 n,代表 Array 的長度。

  • 第二行輸入 n 個整數,代表 Array 的初始內容。

  • 第三行輸入一個正整數 k,代表 Index 序列的長度。

  • 第四行輸入 k 個非負整數 i0, i1, ..., i{k-1},皆滿足 0 \le i < n。

輸出值的格式

輸出執行完所有 Swap 操作後的 Array 最終狀態。每個整數之間以空格分隔,結尾可包含一個空格。

各種需要注意的邊界條件

  • k 等於 1:當 Index 序列只有一個元素時,不會執行任何 Swap 操作,應輸出原 Array。

  • 相同 Index 的 Swap:當連續兩個 Index 相同(例如 ij = i{j+1}),該次操作後 Array 內容不變。

  • Array 長度最小值:考慮 n=1 的極端情況(雖然題目要求 k 個 Index 且 i < n,此時 i 只能為 0)。

  • 元素重複:Array 中的數值可能重複,這不應影響 Swap 邏輯。

  • 數值範圍:Array 內的整數可能為正數、負數或零。

sample input1

4
100 200 300 400
3
0 2 1

sample output1

300 100 200 400

sample input2

5
10 20 30 40 50
4
0 2 4 1

sample output2

30 10 50 40 20

Comments

There are no comments at the moment.