目錄
1 問題描述
魔方可以對它的6個面自由旋轉。
我們來操作一個2階魔方(如圖1所示):

為了描述方便,我們為它建立了坐標系。
各個面的初始狀態如下:
x軸正向:綠
x軸反向:藍
y軸正向:紅
y軸反向:橙
z軸正向:白
z軸反向:黃
假設我們規定,只能對該魔方進行3種操作。分別標記為:
x 表示在x軸正向做順時針旋轉
y 表示在y軸正向做順時針旋轉
z 表示在z軸正向做順時針旋轉
xyz 則表示順序執行x,y,z 3個操作
題目的要求是:
從標准輸入獲得一個串,表示操作序列。
程序輸出:距離我們最近的那個小方塊的3個面的顏色。
順序是:x面,y面,z面。
例如:在初始狀態,應該輸出:
綠紅白
初始狀態下,如果用戶輸入:
x
則應該輸出:
綠白橙
初始狀態下,如果用戶輸入:
zyx
則應該輸出:
紅白綠
請編程實現所述功能。
2 解決方案
1 import java.util.Scanner; 2 3 public class Main { 4 public int[] Now = {1, 1, 1, 1}; //正前方 5 public int[] Back = {2, 2, 2, 2}; 6 public int[] Left = {3, 3, 3, 3}; 7 public int[] Right = {4, 4, 4, 4}; 8 public int[] Up = {5, 5, 5, 5}; 9 public int[] Down = {6, 6, 6, 6}; 10 11 public void reverseX() { 12 int[] value = new int[8]; 13 value[0] = Up[2]; 14 value[1] = Up[3]; 15 value[2] = Right[0]; 16 value[3] = Right[2]; 17 value[4] = Down[2]; 18 value[5] = Down[3]; 19 value[6] = Left[3]; 20 value[7] = Left[0]; 21 Up[2] = value[6]; 22 Up[3] = value[7]; 23 Right[0] = value[0]; 24 Right[2] = value[1]; 25 Down[2] = value[2]; 26 Down[3] = value[3]; 27 Left[3] = value[4]; 28 Left[0] = value[5]; 29 value[0] = Now[0]; 30 value[1] = Now[1]; 31 value[2] = Now[2]; 32 value[3] = Now[3]; 33 Now[0] = value[3]; 34 Now[1] = value[0]; 35 Now[2] = value[1]; 36 Now[3] = value[2]; 37 } 38 39 public void reverseY() { 40 int[] value = new int[8]; 41 value[0] = Up[3]; 42 value[1] = Up[1]; 43 value[2] = Back[1]; 44 value[3] = Back[2]; 45 value[4] = Down[1]; 46 value[5] = Down[2]; 47 value[6] = Now[2]; 48 value[7] = Now[1]; 49 Up[3] = value[6]; 50 Up[1] = value[7]; 51 Back[1] = value[0]; 52 Back[2] = value[1]; 53 Down[1] = value[2]; 54 Down[2] = value[3]; 55 Now[2] = value[4]; 56 Now[1] = value[5]; 57 value[0] = Right[0]; 58 value[1] = Right[1]; 59 value[2] = Right[2]; 60 value[3] = Right[3]; 61 Right[0] = value[2]; 62 Right[1] = value[0]; 63 Right[2] = value[3]; 64 Right[3] = value[1]; 65 } 66 67 public void reverseZ() { 68 int[] value = new int[8]; 69 value[0] = Now[1]; 70 value[1] = Now[0]; 71 value[2] = Left[0]; 72 value[3] = Left[1]; 73 value[4] = Back[0]; 74 value[5] = Back[1]; 75 value[6] = Right[1]; 76 value[7] = Right[0]; 77 Now[1] = value[6]; 78 Now[0] = value[7]; 79 Left[0] = value[0]; 80 Left[1] = value[1]; 81 Back[0] = value[2]; 82 Back[1] = value[3]; 83 Right[1] = value[4]; 84 Right[0] = value[5]; 85 value[0] = Up[0]; 86 value[1] = Up[1]; 87 value[2] = Up[2]; 88 value[3] = Up[3]; 89 Up[0] = value[2]; 90 Up[1] = value[0]; 91 Up[2] = value[3]; 92 Up[3] = value[1]; 93 } 94 95 public void getResult(String A) { 96 String[] color = {"", "綠", "藍", "橙", "紅", "白", "黃"}; 97 for(int i = 0;i < A.length();i++) { 98 char j = A.charAt(i); 99 if(j == 'x') 100 reverseX(); 101 else if(j == 'y') 102 reverseY(); 103 else if(j == 'z') 104 reverseZ(); 105 } 106 int[] result = new int[3]; 107 result[0] = Now[1]; 108 result[1] = Right[0]; 109 result[2] = Up[3]; 110 for(int i = 0;i < 3;i++) 111 System.out.print(color[result[i]]); 112 } 113 114 public static void main(String[] args) { 115 Main test = new Main(); 116 Scanner in = new Scanner(System.in); 117 String A = in.next(); 118 test.getResult(A); 119 } 120 }
運行結果:
xyxyzzxyxyzz
白綠紅
