zoukankan      html  css  js  c++  java
  • 算法笔记_233:二阶魔方旋转(Java)

    目录

    1 问题描述

    2 解决方案

     


    1 问题描述

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


    请编程实现所述功能。


    2 解决方案

      1 import java.util.Scanner;
      2 
      3 public class Main {
      4     public int[] Now = {1, 1, 1, 1}; //正前方
      5     public int[] Back = {2, 2, 2, 2};
      6     public int[] Left = {3, 3, 3, 3};
      7     public int[] Right = {4, 4, 4, 4};
      8     public int[] Up = {5, 5, 5, 5};
      9     public int[] Down = {6, 6, 6, 6};
     10     
     11     public void reverseX() {
     12         int[] value = new int[8];
     13         value[0] = Up[2];
     14         value[1] = Up[3];
     15         value[2] = Right[0];
     16         value[3] = Right[2];
     17         value[4] = Down[2];
     18         value[5] = Down[3];
     19         value[6] = Left[3];
     20         value[7] = Left[0];
     21         Up[2] = value[6];
     22         Up[3] = value[7];
     23         Right[0] = value[0];
     24         Right[2] = value[1];
     25         Down[2] = value[2];
     26         Down[3] = value[3];
     27         Left[3] = value[4];
     28         Left[0] = value[5];
     29         value[0] = Now[0];
     30         value[1] = Now[1];
     31         value[2] = Now[2];
     32         value[3] = Now[3];
     33         Now[0] = value[3];
     34         Now[1] = value[0];
     35         Now[2] = value[1];
     36         Now[3] = value[2];
     37     }
     38     
     39     public void reverseY() {
     40         int[] value = new int[8];
     41         value[0] = Up[3];
     42         value[1] = Up[1];
     43         value[2] = Back[1];
     44         value[3] = Back[2];
     45         value[4] = Down[1];
     46         value[5] = Down[2];
     47         value[6] = Now[2];
     48         value[7] = Now[1];
     49         Up[3] = value[6];
     50         Up[1] = value[7];
     51         Back[1] = value[0];
     52         Back[2] = value[1];
     53         Down[1] = value[2];
     54         Down[2] = value[3];
     55         Now[2] = value[4];
     56         Now[1] = value[5];
     57         value[0] = Right[0];
     58         value[1] = Right[1];
     59         value[2] = Right[2];
     60         value[3] = Right[3];
     61         Right[0] = value[2];
     62         Right[1] = value[0];
     63         Right[2] = value[3];
     64         Right[3] = value[1];
     65      }
     66     
     67     public void reverseZ() {
     68         int[] value = new int[8];
     69         value[0] = Now[1];
     70         value[1] = Now[0];
     71         value[2] = Left[0];
     72         value[3] = Left[1];
     73         value[4] = Back[0];
     74         value[5] = Back[1];
     75         value[6] = Right[1];
     76         value[7] = Right[0];
     77         Now[1] = value[6];
     78         Now[0] = value[7];
     79         Left[0] = value[0];
     80         Left[1] = value[1];
     81         Back[0] = value[2];
     82         Back[1] = value[3];
     83         Right[1] = value[4];
     84         Right[0] = value[5];
     85         value[0] = Up[0];
     86         value[1] = Up[1];
     87         value[2] = Up[2];
     88         value[3] = Up[3];
     89         Up[0] = value[2];
     90         Up[1] = value[0];
     91         Up[2] = value[3];
     92         Up[3] = value[1];
     93     }
     94     
     95     public void getResult(String A) {
     96         String[] color = {"", "绿", "蓝", "橙", "红", "白", "黄"};
     97         for(int i = 0;i < A.length();i++) {
     98             char j = A.charAt(i);
     99             if(j == 'x')
    100                 reverseX();
    101             else if(j == 'y')
    102                 reverseY();
    103             else if(j == 'z')
    104                 reverseZ();
    105         }
    106         int[] result = new int[3];
    107         result[0] = Now[1];
    108         result[1] = Right[0];
    109         result[2] = Up[3];
    110         for(int i = 0;i < 3;i++)
    111             System.out.print(color[result[i]]);
    112     }
    113     
    114     public static void main(String[] args) {
    115         Main test = new Main();
    116         Scanner in = new Scanner(System.in);
    117         String A = in.next();
    118         test.getResult(A);
    119     }
    120 }

    运行结果:

    xyxyzzxyxyzz
    白绿红
  • 相关阅读:
    CSS-16-margin值重叠问题
    CSS-15-定位
    CSS-14-浮动
    CSS-13-块级元素和行内元素
    CSS-12-盒子模型
    CSS-11-外边距
    CSS-10-内边距
    CSS-09-背景属性
    CSS-08-边框属性设置
    CSS-07-CSS文本设置
  • 原文地址:https://www.cnblogs.com/liuzhen1995/p/6900527.html
Copyright © 2011-2022 走看看