转骰子

转骰子

骰子是一个正方体,每个面有一个数字,初始为左1,右2,前3,后4,上5,下6,用123456表示这个状态,放置在平面上,可以向左翻转(用L表示向左翻转1次);可以向右翻转(用R表示向右翻转1次);可以向前翻转(用F表示向前翻转1次);可以向后翻转(用B表示向后翻转1次);可以逆时针翻转(用A表示向逆时针翻转1次);可以向顺时针翻转(用C表示向顺时针翻转1次)

输入一行指令,输出最后骰子的状态

输入
RL
输出
123456
解释:骰子向右转一下,再向左转一下,各面结果相当于不变

思路:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <bits/stdc++.h>
using namespace std;

int main(){
string op;
cin >> op;
// 左 右 前 后 上 下
int status[7] = {0, 1, 2, 3 ,4, 5 ,6};
for(int i = 0; i < op.size(); i++){
switch(op[i]){
case 'L': {
// 前后不变,左上右下,左移一位
int left = status[1];
int up = status[5];
int right = status[2];
int down = status[6];

status[1] = up;
status[5] = right;
status[2] = down;
status[6] = left;
break;
}
case 'R':{
int left = status[1];
int up = status[5];
int right = status[2];
int down = status[6];
//前后不变,左上右下,右移一位
status[1] = down;
status[5] = left;
status[2] = up;
status[6] = right;
break;
}
case 'F':{
//左右不变,前下后上,右移一位
int front = status[3];
int down = status[6];
int rear = status[4];
int up = status[5];

status[3] = up;
status[6] = front;
status[4] = down;
status[5] = rear;
break;
}
case 'B':{
//左右不变,前下后上,左移一位
int front = status[3];
int down = status[6];
int rear = status[4];
int up = status[5];

status[3] = down;
status[6] = rear;
status[4] = up;
status[5] = front;
break;
}
case 'A':{
//上下不变,左前右后,右移一位
int left = status[1];
int front = status[3];
int right = status[2];
int rear = status[4];

status[1] = rear;
status[3] = left;
status[2] = front;
status[4] = right;
break;
}
case 'C':{
//上下不变,左前右后,左移一位
int left = status[1];
int front = status[3];
int right = status[2];
int rear = status[4];
status[1] = front;
status[3] = right;
status[2] = rear;
status[4] = left;
break;
}
}
}
for(int i = 1; i < 7; i++){
cout << status[i];
}
cout << endl;
return 0;
}