zoukankan      html  css  js  c++  java
  • 魔方问题

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

    import java.util.Scanner;
    
    public class Main {
    	//上 下  左  右  前  后
    	//0 1 2 3 4 5
    	//左上到右下顺时针
    	public static void main(String[] args) {
    		String[][] sign = new String[][] {{"白", "白", "白", "白"}, {"黄", "黄", "黄", "黄"}, {"橙", "橙", "橙", "橙"}, 
    			{"红", "红", "红", "红"}, {"绿", "绿", "绿", "绿"}, {"蓝", "蓝", "蓝", "蓝"}};
    		String str = "";
    		Scanner sc = new Scanner(System.in);
    		str = sc.nextLine();
    		
    		for(int i = 0; i < str.length(); i ++) {
    			if(str.charAt(i) == 'x') {
    				String _1_1 = sign[0][2];
    				String _1_2 = sign[0][3];
    				String _2_1 = sign[3][3];
    				String _2_2 = sign[3][0];
    				String _3_1 = sign[1][0];
    				String _3_2 = sign[1][1];
    				
     				sign[0][2] = sign[2][1];
    				sign[0][3] = sign[2][2];
    				
    				sign[3][3] = _1_1;
    				sign[3][0] = _1_2;
    				
    				sign[1][0] = _2_1;
    				sign[1][1] = _2_2;
    				
    				sign[2][1] = _3_1;
    				sign[2][2] = _3_2;
    				
    				//前面
    				String temp_1 = sign[4][1];
    				String temp_2 = sign[4][2];
    				String temp_3 = sign[4][3];
    				
    				sign[4][1] = sign[4][0];
    				sign[4][2] = temp_1;
    				sign[4][3] = temp_2;
    				sign[4][0] = temp_3;
    			}
    			else if(str.charAt(i) == 'y') {
    				String _1_1 = sign[0][1];
    				String _1_2 = sign[0][2];
    				String _2_1 = sign[5][3];
    				String _2_2 = sign[5][0];
    				String _3_1 = sign[1][1];
    				String _3_2 = sign[1][2];
    				
    				sign[0][1] = sign[4][1];
    				sign[0][2] = sign[4][2];
    				
    				sign[5][3] = _1_1;
    				sign[5][0] = _1_2;
    				
    				sign[1][1] = _2_1;
    				sign[1][2] = _2_2;
    				
    				sign[4][1] = _3_1;
    				sign[4][2] = _3_2;
    				
    				//右面
    				String temp_1 = sign[3][1];
    				String temp_2 = sign[3][2];
    				String temp_3 = sign[3][3];
    				
    				sign[3][1] = sign[3][0];
    				sign[3][2] = temp_1;
    				sign[3][3] = temp_2;
    				sign[3][0] = temp_3;
    			}
    			else {
    				String _1_1 = sign[2][0];
    				String _1_2 = sign[2][1];
    				String _2_1 = sign[5][0];
    				String _2_2 = sign[5][1];
    				String _3_1 = sign[3][0];
    				String _3_2 = sign[3][1];
    				
    				sign[2][0] = sign[4][0];
    				sign[2][1] = sign[4][1];
    				
    				sign[5][0] = _1_1;
    				sign[5][1] = _1_2;
    				
    				sign[3][0] = _2_1;
    				sign[3][1] = _2_2;
    				
    				sign[4][0] = _3_1;
    				sign[4][1] = _3_2;
    				
    				//上面
    				String temp_1 = sign[0][1];
    				String temp_2 = sign[0][2];
    				String temp_3 = sign[0][3];
    				
    				sign[0][1] = sign[0][0];
    				sign[0][2] = temp_1;
    				sign[0][3] = temp_2;
    				sign[0][0] = temp_3;
    			}
    		}
    		
    		System.out.println(sign[4][1] + sign[3][0] + sign[0][2]);
    		
    		
    	}
    }
    

      

  • 相关阅读:
    mysql workbench 建表时PK, NN, UQ, BIN, UN, ZF, AI
    Asan检测内存读越界
    C 实现 C++ 的面向对象特性(封装、继承、多态)
    VIBE算法
    Go 大坑 nil
    求二叉树中节点的最大距离
    计算[1,N]范围内含有7的数字的个数
    一组便于创建线程和线程池的简单封装函数
    用C#执行doc命令
    可以自由停靠的窗体!
  • 原文地址:https://www.cnblogs.com/jizhidexiaobai/p/8519363.html
Copyright © 2011-2022 走看看