您的位置:首页 > 其它

二阶魔方旋转 魔方可以对它的6个面自由旋转。 我们来操作一个2阶魔方(如图1所示):

2013-04-16 18:19 573 查看










/* 二阶魔方旋转
魔方可以对它的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
则应该输出:
红白绿

请编程实现所述功能。
*/
import java.util.Scanner;

public class Demo06 {
// x旋转操作
public static void xSpin(char[] xf, char[] yf, char[] ya, char[] zf,
char[] za) {
char yf0 = yf[0];
char yf2 = yf[2];
char ya0 = ya[0];
char ya2 = ya[2];
// 修改y的前后面
yf[0] = zf[0];
yf[2] = zf[2];
ya[0] = za[0];
ya[2] = za[2];
// 修改z的前后面
zf[0] = ya0;
zf[2] = ya2;
za[0] = yf0;
za[2] = yf2;
// 修改x前面
char xf0 = xf[0];
xf[0] = xf[2];
xf[2] = xf[3];
xf[3] = xf[1];
xf[1] = xf0;
}
// y旋转操作
public static void ySpin(char[] xf, char[] xa, char[] yf, char[] zf,
char[] za) {
char zf2 = zf[2];
char zf3 = zf[3];
char za0 = za[0];
char za1 = za[1];
// 修改z的前后面
zf[2] = xf[3];
zf[3] = xf[1];
za[1] = xa[2];
za[0] = xa[3];
// 修改x的前后面
xa[2] = zf2;
xa[3] = zf3;
xf[1] = za0;
xf[3] = za1;
// 修改y前面
char yf0 = yf[0];
yf[0] = yf[2];
yf[2] = yf[3];
yf[3] = yf[1];
yf[1] = yf0;
}
// z旋转操作
public static void zSpin(char[] xf, char[] xa, char[] yf, char[] ya,
char[] zf) {
char xf0 = xf[0];
char xf1 = xf[1];
char xa2 = xa[2];
char xa0 = xa[0];
// 修改x的前后面
xf[0] = yf[0];
xf[1] = yf[1];
xa[0] = ya[2];
xa[2] = ya[3];
// 修改y的前后面
yf[0] = xa2;
yf[1] = xa0;
ya[3] = xf0;
ya[2] = xf1;
// 修改z前面
char zf0 = zf[0];
zf[0] = zf[2];
zf[2] = zf[3];
zf[3] = zf[1];
zf[1] = zf0;
}
public static void main(String[] args){
char[] xf = {'绿','绿','绿','绿'};	// x前
char[] xa = {'蓝','蓝','蓝','蓝'};	// x后

char[] yf = {'红','红','红','红'};	// y前
char[] ya = {'橙','橙','橙','橙'};	// y后

char[] zf = {'白','白','白','白'};	// z前
char[] za = {'黄','黄','黄','黄'};	// z后

Scanner scan = new Scanner(System.in);
System.out.println("输入关于xyz的字符串");
String s = scan.nextLine();
char[] c = s.toCharArray();	// 输入的数据以每个字符来操作
for(int i=0;i<c.length;i++){
switch(c[i]){
case 'x': {	// x旋转操作
xSpin(xf, yf, ya, zf, za);
}break;
case 'y': {	// y旋转操作
ySpin(xf, xa, yf, zf, za);
}break;
case 'z': {	// z旋转操作
zSpin(xf, xa, yf, ya, zf);
}break;
}
}
System.out.println(xf[1]+""+yf[0]+""+zf[2]);
}
}
运行结果:
输入关于xyz的字符串
zyx
红白绿
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐