【暴力模拟】二阶魔方旋转
魔方可以对它的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 D1;import java.util.Scanner;/*** @作者: gx_143* @创建时间: 2017-5-16下午07:12:34*/
public class D4 {/*** @param args*/public static void main(String[] args) {// TODO Auto-generated method stubchar[] x=new char[]{'绿','绿','绿','绿'};char[] z=new char[]{'白','白','白','白'};char[] y=new char[]{'红','红','红','红'};char[] xf=new char[]{'蓝','蓝','蓝','蓝'};char[] zf=new char[]{'黄','黄','黄','黄'};char[] yf=new char[]{'橙','橙','橙','橙'};Scanner sc=new Scanner(System.in);while(sc.hasNext()){String str=sc.nextLine();for (int i = 0; i < str.length(); i++) {f(x,y,z,xf,yf,zf,str.charAt(i));}System.out.println(x[0]+""+y[0]+""+z[0]+"");}}private static void f(char[] x, char[] y, char[] z, char[] xf, char[] yf,char[] zf, char c) {if(c=='x'){{char t=x[0];x[0]=x[3];x[3]=x[2];x[2]=x[1];x[1]=t;}{char t=z[0];z[0]=yf[0];yf[0]=zf[0];zf[0]=y[1];y[1]=t;}{char t=z[1];z[1]=yf[1];yf[1]=zf[1];zf[1]=y[0];y[0]=t;}}else if(c=='y'){{char t=y[0];y[0]=y[3];y[3]=y[2];y[2]=y[1];y[1]=t;}{char t=z[0];z[0]=x[1];x[1]=zf[2];zf[2]=xf[1];xf[1]=t;}{char t=z[3];z[3]=x[0];x[0]=zf[1];zf[1]=xf[0];xf[0]=t;}}else{{char t=z[0];z[0]=z[3];z[3]=z[2];z[2]=z[1];z[1]=t;}{char t=xf[1];xf[1]=yf[3];yf[3]=x[3];x[3]=y[0];y[0]=t;}{char t=xf[2];xf[2]=yf[0];yf[0]=x[0];x[0]=y[3];y[3]=t;}}}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
