问题描述
魔方可以对它的6个面自由旋转。
我们来操作一个2阶魔方,如图:
为了描述方便,我们为它建立了坐标系。
各个面的初始状态如下:
x轴正向:绿
x轴反向:蓝
y轴正向:红
y轴反向:橙
z轴正向:白
z轴反向:黄
假设我们规定,只能对该魔方进行3种操作。分别标记为:
x 表示在x轴正向做顺时针旋转
y 表示在y轴正向做顺时针旋转
z 表示在z轴正向做顺时针旋转
xyz 则表示顺序执行x,y,z 3个操作
题目的要求是:
用户从键盘输入一个串,表示操作序列。
程序输出:距离我们最近的那个小方块的3个面的颜色。
顺序是:x面,y面,z面。
输入输出用例
例如:在初始状态,应该输出:
绿红白
初始状态下,如果用户输入:
x
则应该输出:
绿白橙
初始状态下,如果用户输入:
zyx
则应该输出:
红白绿
这道题用大小6(面)×4(格)的二维数组存储每个小方格的状态,分别对进行x操作、y操作、z操作时方格的状态进行变换和存储,但是不知道为什么每个评测数据结果是正确的,粘贴到蓝桥杯上正确率为0.
代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String string=scanner.next();
int[][] arr= new int[6][4];//0前、1后、2左、3右、4上、5下
int[][] index=new int[1][3];
//初始化
for(int i=0;i<6;i++) {
for(int j=0;j<4;j++) {
//1绿色、2蓝色、3橙色、4红色、5白色、6黄色
arr[i][j]=i+1;
}
}
for(int i=0;i<string.length();i++) {
if(string.charAt(i)=='x') {
index[0][0]=arr[4][3];
index[0][1]=arr[4][1];
index[0][2]=arr[0][0];
arr[0][0]=arr[0][2];
arr[0][2]=arr[0][3];
arr[0][3]=arr[0][1];
arr[0][1]=index[0][2];
arr[4][3]=arr[2][3];
arr[4][1]=arr[2][1];
arr[2][3]=arr[5][1];
arr[2][1]=arr[5][3];
arr[5][3]=arr[3][3];
arr[5][1]=arr[3][1];
arr[3][3]=index[0][1];
arr[3][1]=index[0][0];
}
if(string.charAt(i)=='y') {
index[0][0]=arr[4][0];
index[0][1]=arr[4][1];
index[0][2]=arr[3][0];
arr[3][0]=arr[3][1];
arr[3][1]=arr[3][3];
arr[3][3]=arr[3][2];
arr[3][2]=index[0][2];
arr[4][0]=arr[0][1];
arr[4][1]=arr[0][3];
arr[0][1]=arr[5][1];
arr[0][3]=arr[5][0];
arr[5][1]=arr[1][3];
arr[5][0]=arr[1][1];
arr[1][3]=index[0][0];
arr[1][1]=index[0][1];
}
if(string.charAt(i)=='z') {
index[0][0]=arr[0][0];
index[0][1]=arr[0][1];
index[0][2]=arr[4][0];
arr[4][0]=arr[4][2];
arr[4][2]=arr[4][3];
arr[4][3]=arr[4][1];
arr[0][1]=index[0][2];
arr[0][0]=arr[3][1];
arr[0][1]=arr[3][0];
arr[3][1]=arr[1][1];
arr[3][0]=arr[1][0];
arr[1][1]=arr[2][0];
arr[1][0]=arr[2][1];
arr[2][0]=index[0][0];
arr[2][1]=index[0][1];
}
}
System.out.print(color(arr, 0, 1)+color(arr, 3, 1)+color(arr, 4, 1));
}
public static String color(int[][] arr,int i,int j) {
if(arr[i][j]==1) {//分别代表绿色、蓝色、橙色、红色、白色、黄色
return "绿";
}
if(arr[i][j]==2) {
return "蓝";
}
if(arr[i][j]==3) {
return "橙";
}
if(arr[i][j]==4) {
return "红";
}
if(arr[i][j]==5) {
return "白";
}
if(arr[i][j]==6) {
return "黄";
}
return "-1";
}
}