深度优先

这个家伙好懒,除了文章什么都没留下

0%

【算法】二阶魔方旋转

魔方可以对它的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
则应该输出:

红白绿


这个题就比较有意思,之前会玩三阶魔方和四阶魔方,怎么能被这二阶魔方给难倒呢?

于是就这样模拟做了。

代码,有点多:

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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
*
*/
package D1;

import java.util.Scanner;

/**
* @作者: gx_143
* @创建时间: 2017-5-16下午07:12:34
*/
public class D4 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
char[] x=new char[]{'绿','绿','绿','绿'};
char[] z=new char[]{'白','白','白','白'};
char[] y=new char[]{'红','红','红','红'};

char[] xf=new char[]{'蓝','蓝','蓝','蓝'};
char[] zf=new char[]{'黄','黄','黄','黄'};
char[] yf=new char[]{'橙','橙','橙','橙'};

Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str=sc.nextLine();

for (int i = 0; i < str.length(); i++) {
f(x,y,z,xf,yf,zf,str.charAt(i));
}
System.out.println(x[0]+""+y[0]+""+z[0]+"");
}
}

private static void f(char[] x, char[] y, char[] z, char[] xf, char[] yf,
char[] zf, char c) {

if(c=='x'){
{
char t=x[0];
x[0]=x[3];
x[3]=x[2];
x[2]=x[1];
x[1]=t;
}
{
char t=z[0];
z[0]=yf[0];
yf[0]=zf[0];
zf[0]=y[1];
y[1]=t;
}
{
char t=z[1];
z[1]=yf[1];
yf[1]=zf[1];
zf[1]=y[0];
y[0]=t;
}
}else if(c=='y'){
{
char t=y[0];
y[0]=y[3];
y[3]=y[2];
y[2]=y[1];
y[1]=t;
}
{
char t=z[0];
z[0]=x[1];
x[1]=zf[2];
zf[2]=xf[1];
xf[1]=t;
}
{
char t=z[3];
z[3]=x[0];
x[0]=zf[1];
zf[1]=xf[0];
xf[0]=t;
}
}else{
{
char t=z[0];
z[0]=z[3];
z[3]=z[2];
z[2]=z[1];
z[1]=t;
}
{
char t=xf[1];
xf[1]=yf[3];
yf[3]=x[3];
x[3]=y[0];
y[0]=t;
}
{
char t=xf[2];
xf[2]=yf[0];
yf[0]=x[0];
x[0]=y[3];
y[3]=t;
}
}
}
}