目录
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
白绿红