Matrix Flipping Transformation
Submit solution
Points:
10 (partial)
Time limit:
1.0s
Memory limit:
64M
Authors:
Problem type
Allowed languages
Java 19, Java 8
題目說明
本題目要求實作一個矩陣轉換程式。使用者將輸入一個 3 x 3 的整數矩陣,輸入順序為由左至右、由上至下。接著使用者會輸入一個包含 4 個字元的指令字串,其中字元 v 代表進行垂直翻轉 Vertical Flip,字元 h 代表進行水平翻轉 Horizontal Flip。程式必須依照指令順序對矩陣進行多次操作,並輸出最終轉換後的矩陣結果。
垂直翻轉 Vertical Flip 定義為:將矩陣的第一個 Row 與最後一個 Row 進行對調,中間的 Row 保持不變。
水平翻轉 Horizontal Flip 定義為:將矩陣的第一個 Col 與最後一個 Col 進行對調,中間的 Col 保持不變。
本題目已經提供主程式框架,包含輸入處理、指令解析循環以及結果輸出。考生僅能實作 verticalFlip 與 horizontalFlip 這兩個函數,嚴禁修改 main 函數中的邏輯或變更現有的程式結構。
樣板程式碼如下:
import java.util.Scanner;
public class MatrixTransformer {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[][] matrix = new int[3][3];
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
matrix[i][j] = sc.nextInt();
}
}
String commands = "";
for (int i = 0; i < 4; i++) {
commands += sc.next();
}
for (int k = 0; k < commands.length(); k++) {
char cmd = commands.charAt(k);
if (cmd == 'v') {
verticalFlip(matrix);
} else if (cmd == 'h') {
horizontalFlip(matrix);
}
}
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.print(matrix[i][j]);
if (j < matrix[i].length - 1) {
System.out.print(" ");
}
}
System.out.println();
}
sc.close();
}
public static ... verticalFlip(...) {
// 建立暫存矩陣儲存結果
// 用暫存矩陣複寫原始矩陣
}
public static void horizontalFlip(int[][] matrix) {
// 建立暫存矩陣儲存結果
// 用暫存矩陣複寫原始矩陣
}
}輸入值的格式
第一行包含 9 個整數,代表 3 x 3 矩陣的元素,數值範圍為 -2147483648 至 2147483647。
第二行包含一個長度為 4 的字串,僅由小寫字母 v 與 h 組成。
輸出值的格式
輸出為三行,每行包含 3 個整數,代表操作後的 3 x 3 矩陣。每個整數之間以一個半形空格分隔,每行末尾包含一個換行符號。
各種需要注意的邊界條件
矩陣元素包含正數、負數與零。
指令字串可能包含重複的指令,例如 vvvv。
兩次相同的操作(如 vv 或 hh)會使矩陣恢復原狀。
矩陣本身可能是對稱的,在這種情況下,特定的翻轉操作可能不會改變矩陣內容。
操作順序會影響最終結果,必須嚴格依照字串由左至右的順序執行。
sample input1
1 2 3 4 5 6 7 8 9
v h v hsample output1
1 2 3
4 5 6
7 8 9sample input2
1 2 3 4 5 6 7 8 9
v v v hsample output2
9 8 7
6 5 4
3 2 1
Comments