试题 历届真题 魔方旋转问题(Java)

该篇文章介绍了一个编程题目,要求设计一个程序,根据用户输入的魔方操作序列(仅限x、y、z轴顺时针旋转),计算并输出魔方最后三个面的颜色。程序使用二维数组模拟魔方状态并更新,但提交到评测平台时正确率低。
摘要由CSDN通过智能技术生成

问题描述

  魔方可以对它的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";
		
	}

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值