魔方可以对它的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
则应该输出:
红白绿
我们可以将每次旋转的变化直接用暴力法写出来
package blueBridge;
public class magicCubeRotation {
String [] cube=new String[24];
public magicCubeRotation()
{
for(int i=0;i<24;i++)
{
if(i/4==0)
cube[i]="白";
if((i/4)==1)
cube[i]="黄";
if((i/4)==2)
cube[i]="绿";
if((i/4)==3)
cube[i]="蓝";
if((i/4)==4)
cube[i]="红";
if((i/4)==5)
cube[i]="橙";
}
}
public void swap(String i,String j)
{
String temp=i;
i=j;
j=temp;
}
public void x()
{
String temp1=cube[3];
String temp2=cube[2];
cube[3]=cube[20];
cube[2]=cube[22];
cube[20]=cube[6];
cube[22]=cube[7];
cube[6]=cube[18];
cube[7]=cube[16];
cube[18]=temp1;
cube[16]=temp2;
String temp=cube[8];
cube[8]=cube[10];
cube[10]=cube[11];
cube[11]=cube[9];
cube[9]=temp;
}
public void y()
{
String temp1=cube[1];
String temp2=cube[3];
cube[1]=cube[9];
cube[3]=cube[11];
cube[9]=cube[5];
cube[11]=cube[7];
cube[5]=cube[13];
cube[7]=cube[15];
cube[15]=temp1;
cube[13]=temp2;
String temp=cube[16];
cube[16]=cube[18];
cube[18]=cube[19];
cube[19]=cube[17];
cube[17]=temp;
}
public void z()
{
String temp=cube[0];
cube[0]=cube[2];
cube[2]=cube[3];
cube[3]=cube[1];
cube[1]=temp;
String temp1=cube[8];
String temp2=cube[9];
cube[8]=cube[16];
cube[9]=cube[17];
cube[16]=cube[13];
cube[17]=cube[12];
cube[13]=cube[21];
cube[12]=cube[20];
cube[21]=temp1;
cube[20]=temp2;
}
public void print()
{
System.out.print(cube[9]+cube[16]+cube[3]);
}
}