魔方旋转(三阶) 实用性原则

时间:2022-08-02 10:20:11

例题:魔方可以对它的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
则应该输出:

红白绿

魔方旋转(三阶) 实用性原则

[java]  view plain  copy
  1. package KeCheng1;  
  2.   
  3. public class T1XinYongKa {  
  4.       
  5.     //操作位置  
  6.         static int[][] transx={{0,1,2,3},{4,21,14,19},{7,20,13,18}};  
  7.         static int[][] transy={{4,5,6,7},{1,17,11,21},{2,18,8,22}};  
  8.         static int[][] transz={{16,17,18,19},{0,12,8,4},{1,13,9,5}};  
  9.       
  10.     static char[] f(char[] a,int[][] trans){  
  11.           
  12.         char[] b=java.util.Arrays.copyOf(a, a.length);  
  13.           
  14.         for(int i=0;i<trans.length;i++){  
  15.             b[trans[i][1]] = a[trans[i][0]];  
  16.             b[trans[i][2]] = a[trans[i][1]];  
  17.             b[trans[i][3]] = a[trans[i][2]];  
  18.             b[trans[i][0]] = a[trans[i][3]];  
  19.         }  
  20.           
  21.         return b;  
  22.     }  
  23.       
  24.     static char[] g(char[] a,String s){  
  25.         char[] b=java.util.Arrays.copyOf(a, a.length);  
  26.         for(int i=0;i<s.length();i++){  
  27.             if(s.charAt(i)=='x') b=f(b,transx);  
  28.             if(s.charAt(i)=='y') b=f(b,transy);  
  29.             if(s.charAt(i)=='z') b = f(b, transz);  
  30.         }  
  31.         return b;  
  32.     }  
  33.       
  34.   
  35.     public static void main(String[] args) {  
  36.         // TODO Auto-generated method stub  
  37.         char[] init =  {'绿','绿','绿','绿',  
  38.                 '红','红','红','红',  
  39.                 '蓝','蓝','蓝','蓝',  
  40.                 '橙','橙','橙','橙',  
  41.                 '白','白','白','白',  
  42.                 '黄','黄','黄','黄',};  
  43.           
  44.         char[] b = g(init, "x");  
  45.         System.out.println(""+b[1]+b[4]+b[18]);  
  46.   
  47.     }  
  48.   
  49. }