5. 魔方

小码哥最近在玩魔方。和平常的三维魔方不同,小码哥的魔方是一个由 
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();
        }
    }
}
 

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值