2017华为机试题--投骰子问题

题目描述:骰子是一个立方体,每个面一个数字,初始为左1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置到平面上,可以向左翻转(用L表示向左翻转1次),可以向右翻转(用R表示向右翻转1次),可以向前翻转(用F表示向前翻转1次),可以向后翻转(用B表示向右翻转1次),可以逆时针旋转(用A表示逆时针旋转90度),可以顺时针旋转(用C表示逆时针旋转90度),现从初始状态开始,根据输入的动作序列,计算得到最终的状态。

输入描述:

初始状态为:123456

输入只包含LRFBAC的字母序列,最大长度为50,可重复

输出描述:输出最终状态

输入例子:RA

输出例子:436512

代码如下:

 1 import java.util.*;
 2 
 3 public class Main {
 4 
 5     public static int l = 1, r = 2, f = 3, b = 4, u = 5, d = 6;
 6 
 7     public static void handle(char cmd) {
 8         if (cmd == 'C') {        //R
 9             int cpl = l;
10             l = f;
11             f = r;
12             r = b;
13             b = cpl;
14         } else if (cmd == 'A') {        //L
15             int cpr = r;
16             r = f;
17             f = l;
18             l = b;
19             b = cpr;
20         } else if (cmd == 'F') {
21             int cpf = f;
22             f = u;
23             u = b;
24             b = d;
25             d = cpf;
26         } else if (cmd == 'B') {
27             int cpb = b;
28             b = u;
29             u = f;
30             f = d;
31             d = cpb;
32         } else if (cmd == 'R') {        //A
33             int cpu = u;
34             u = l;
35             l = d;
36             d = r;
37             r = cpu;
38         } else if (cmd == 'L') {        //C
39             int cpu = u;
40             u = r;
41             r = d;
42             d = l;
43             l = cpu;
44         }
45     }
46 
47     public static void main(String[] args) {
48         Scanner scan = new Scanner(System.in);
49         String strs = scan.nextLine();
50         scan.close();
51         for (int i = 0; i < strs.length(); i++)
52             handle(strs.charAt(i));
53         System.out.println("" + l + r + f + b + u + d);
54     }
55 }
原文地址:https://www.cnblogs.com/Jocelyn66/p/6687747.html