小码哥最近在玩魔方。和平常的三维魔方不同,小码哥的魔方是一个由 9 9 个格子组成的 3 × 3 3×3 的二维魔方。每个格子的颜色为红、绿、蓝三种颜色中的一种。 初始魔方的第一行为红色,第二行为绿色,第三行为蓝色。魔方的每个操作都由编号加字母组成的字符串表示。其中字母只会从 L、R、U、D 中选择,表示移动方向。编号从 1 , 2 , 3 1,2,3 中选择,其具体代表行还是列依据移动方向进行判断。当执行一次操作后,选择的那行(列)会在那个方向上进行一步循环位移操作。 如在初始状态下进行了一次 3U 操作后,魔方的状态如下图所示: 再进行一步 2L 操作后,魔方的状态如下图所示: 现在给定一系列操作,请你计算一下若从初始状态开始依次执行这些操作,最后魔方会达到怎样的状态。 格式 输入格式: 第一行输入一个整数 𝑛 ( 1 ≤ 𝑛 ≤ 1 0 3 ) n(1≤n≤10 3 ),表示操作次数。 接下来输入 𝑛 n 行,每行输入一个由编号加字母组成的操作。 输出格式: 输出 3 3 行,每行 3 3 个字母,表示 𝑛 n 次操作后魔方的状态。字母只包含 r、g、b三种,分别表示红色、绿色和蓝色。 样例 1 输入: 3 3U 2L 1D 输出: brg rbg gbr
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
char[][] cube = {{'r', 'r', 'r'},
{'g', 'g', 'g'},
{'b', 'b', 'b'}};
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.nextLine();
while (n-- > 0) {
String s=scanner.next();
char ope = s.charAt(1);
int num = s.charAt(0)-'0';
--num;
char tmp;
switch (ope) {
case 'L':
tmp = cube[num][0];
cube[num][0] = cube[num][1];
cube[num][1] = cube[num][2];
cube[num][2] = tmp;
break;
case 'R':
tmp = cube[num][2];
cube[num][2] = cube[num][1];
cube[num][1] = cube[num][0];
cube[num][0] = tmp;
break;
case 'U':
tmp = cube[0][num];
cube[0][num] = cube[1][num];
cube[1][num] = cube[2][num];
cube[2][num] = tmp;
break;
case 'D':
tmp = cube[2][num];
cube[2][num] = cube[1][num];
cube[1][num] = cube[0][num];
cube[0][num] = tmp;
break;
}
}
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 3; ++j) {
System.out.print(cube[i][j]);
}
System.out.println();
}
}
}