Array Sequential Swap Processor
題目說明
本題目要求實作一個針對 Array 進行連續性 Swap 操作的程序。系統將給定一個長度為 n 的 Array,以及一組包含 k 個 Index 的序列。程式必須依照該序列的順序,執行 $k-1$ 次 Swap 操作。
具體邏輯如下:
假設 Index 序列為 i0, i1, i2, ..., i{k-1}。
第一次操作:Swap 陣列中 Index 為
i0與i1的兩個元素。第二次操作:Swap 陣列中 Index 為
i1與i2的兩個元素。依此類推,直到執行最後一次操作:Swap 陣列中 Index 為
i {k-2}與i {k-1}的兩個元素。
本題已提供主程式框架,考生必須完成三個指定的 Method:getFirstIndex、getSecondIndex 以及 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 1sample output1
300 100 200 400sample input2
5
10 20 30 40 50
4
0 2 4 1sample output2
30 10 50 40 20
Comments