算法筆記_233:二階魔方旋轉(Java)


目錄

1 問題描述

2 解決方案

 


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
白綠紅

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM