例题:魔方可以对它的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 KeCheng1;
- public class T1XinYongKa {
- //操作位置
- static int[][] transx={{0,1,2,3},{4,21,14,19},{7,20,13,18}};
- static int[][] transy={{4,5,6,7},{1,17,11,21},{2,18,8,22}};
- static int[][] transz={{16,17,18,19},{0,12,8,4},{1,13,9,5}};
- static char[] f(char[] a,int[][] trans){
- char[] b=java.util.Arrays.copyOf(a, a.length);
- for(int i=0;i<trans.length;i++){
- b[trans[i][1]] = a[trans[i][0]];
- b[trans[i][2]] = a[trans[i][1]];
- b[trans[i][3]] = a[trans[i][2]];
- b[trans[i][0]] = a[trans[i][3]];
- }
- return b;
- }
- static char[] g(char[] a,String s){
- char[] b=java.util.Arrays.copyOf(a, a.length);
- for(int i=0;i<s.length();i++){
- if(s.charAt(i)=='x') b=f(b,transx);
- if(s.charAt(i)=='y') b=f(b,transy);
- if(s.charAt(i)=='z') b = f(b, transz);
- }
- return b;
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- char[] init = {'绿','绿','绿','绿',
- '红','红','红','红',
- '蓝','蓝','蓝','蓝',
- '橙','橙','橙','橙',
- '白','白','白','白',
- '黄','黄','黄','黄',};
- char[] b = g(init, "x");
- System.out.println(""+b[1]+b[4]+b[18]);
- }
- }