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


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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值