题目:
魔方可以对它的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
则应该输出:
红白绿
请编程实现所述功能。
要求考生把所有函数写在一个文件中。调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。
对于编程题目,要求选手给出的解答完全符合ANSI C标准,不能使用c++特性;
不能使用诸如绘图、中断调用等硬件相关或操作系统相关的API。
程序如下:
package lilu.fangzhen;
import java.util.Scanner;
public class MoFang {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MoFang t=new MoFang();
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
int[] state={0,1,2,3,4,5,6,7};//八个方块
char[] colorx={'绿','蓝','绿','蓝','绿','蓝','绿','蓝'};//8个方块x面的颜色
char[] colory={'红','红','红','红','橙','橙','橙','橙'};//8个方块y面的颜色
char[] colorz={'白','白','黄','黄','白','白','黄','黄'};//8个方块z面的颜色
t.test4(s,state,colorx,colory,colorz);
/*for(int i=0;i<state.length;i++)
{
System.out.println(i+" "+state[i]);
}*/
for(int i=0;i<8;i++)
{
System.out.println(i+" "+state[i]+" "+colorx[i]+" "+colory[i]+" "+colorz[i]);
}
}
public void test4(String s,int[] state,char[] colorx,char[] colory,char[] colorz)
{
for(int i=0;i<s.length();i++)
{
char a=s.charAt(i);
turn(a,state,colorx,colory,colorz);
}
}
public void turn(char a,int[] state,char[] colorx,char[] colory,char[] colorz)
{
if(a=='x')
{
//转换三个面的颜色
char t=colorz[0];
colorz[0]=colory[4];
colory[4]=colorz[6];
colorz[6]=colory[2];
colory[2]=t;
char t1=colory[0];
colory[0]=colorz[4];
colorz[4]=colory[6];
colory[6]=colorz[2];
colorz[2]=t1;
char t2=colorx[0];
colorx[0]=colorx[4];
colorx[4]=colorx[6];
colorx[6]=colorx[2];
colorx[2]=t2;
int temp=state[0];
state[0]=state[4];
state[4]=state[6];
state[6]=state[2];
state[2]=temp;
}
else if(a=='y')
{
char t=colorz[0];
colorz[0]=colorx[2];
colorx[2]=colorz[3];
colorz[3]=colorx[1];
colorx[1]=t;
char t1=colorx[0];
colorx[0]=colorz[2];
colorz[2]=colorx[3];
colorx[3]=colorz[1];
colorz[1]=t1;
char t2=colory[0];
colory[0]=colory[2];
colory[2]=colory[3];
colory[3]=colory[1];
colory[1]=t2;
int temp=state[0];
state[0]=state[2];
state[2]=state[3];
state[3]=state[1];
state[1]=temp;
}
else if(a=='z')
{
char t=colorx[0];
colorx[0]=colory[1];
colory[1]=colorx[5];
colorx[5]=colory[4];
colory[4]=t;
char t1=colory[0];
colory[0]=colorx[1];
colorx[1]=colory[5];
colory[5]=colorx[4];
colorx[4]=t1;
char t2=colorz[0];
colorz[0]=colorz[1];
colorz[1]=colorz[5];
colorz[5]=colorz[4];
colorz[4]=t2;
int temp=state[0];
state[0]=state[1];
state[1]=state[5];
state[5]=state[4];
state[4]=temp;
}
}
}