魔方可以对它的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 {
public int[] Now = {1, 1, 1, 1}; //正前方
public int[] Back = {2, 2, 2, 2};
public int[] Left = {3, 3, 3, 3};
public int[] Right = {4, 4, 4, 4};
public int[] Up = {5, 5, 5, 5};
public int[] Down = {6, 6, 6, 6}; public void reverseX() {
int[] value = new int[8];
value[0] = Up[2];
value[1] = Up[3];
value[2] = Right[0];
value[3] = Right[2];
value[4] = Down[2];
value[5] = Down[3];
value[6] = Left[3];
value[7] = Left[0];
Up[2] = value[6];
Up[3] = value[7];
Right[0] = value[0];
Right[2] = value[1];
Down[2] = value[2];
Down[3] = value[3];
Left[3] = value[4];
Left[0] = value[5];
value[0] = Now[0];
value[1] = Now[1];
value[2] = Now[2];
value[3] = Now[3];
Now[0] = value[3];
Now[1] = value[0];
Now[2] = value[1];
Now[3] = value[2];
} public void reverseY() {
int[] value = new int[8];
value[0] = Up[3];
value[1] = Up[1];
value[2] = Back[1];
value[3] = Back[2];
value[4] = Down[1];
value[5] = Down[2];
value[6] = Now[2];
value[7] = Now[1];
Up[3] = value[6];
Up[1] = value[7];
Back[1] = value[0];
Back[2] = value[1];
Down[1] = value[2];
Down[2] = value[3];
Now[2] = value[4];
Now[1] = value[5];
value[0] = Right[0];
value[1] = Right[1];
value[2] = Right[2];
value[3] = Right[3];
Right[0] = value[2];
Right[1] = value[0];
Right[2] = value[3];
Right[3] = value[1];
} public void reverseZ() {
int[] value = new int[8];
value[0] = Now[1];
value[1] = Now[0];
value[2] = Left[0];
value[3] = Left[1];
value[4] = Back[0];
value[5] = Back[1];
value[6] = Right[1];
value[7] = Right[0];
Now[1] = value[6];
Now[0] = value[7];
Left[0] = value[0];
Left[1] = value[1];
Back[0] = value[2];
Back[1] = value[3];
Right[1] = value[4];
Right[0] = value[5];
value[0] = Up[0];
value[1] = Up[1];
value[2] = Up[2];
value[3] = Up[3];
Up[0] = value[2];
Up[1] = value[0];
Up[2] = value[3];
Up[3] = value[1];
} public void getResult(String A) {
String[] color = {"", "绿", "蓝", "橙", "红", "白", "黄"};
for(int i = 0;i < A.length();i++) {
char j = A.charAt(i);
if(j == 'x')
reverseX();
else if(j == 'y')
reverseY();
else if(j == 'z')
reverseZ();
}
int[] result = new int[3];
result[0] = Now[1];
result[1] = Right[0];
result[2] = Up[3];
for(int i = 0;i < 3;i++)
System.out.print(color[result[i]]);
} public static void main(String[] args) {
Main test = new Main();
Scanner in = new Scanner(System.in);
String A = in.next();
test.getResult(A);
}
}

Java实现二阶魔方旋转的更多相关文章

  1. 算法笔记_233:二阶魔方旋转(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 魔方可以对它的6个面自由旋转. 我们来操作一个2阶魔方(如图1所示): 为了描述方便,我们为它建立了坐标系. 各个面的初始状态如下:x轴正向:绿x轴 ...

  2. HDU4801·二阶魔方

    题意:给定二阶魔方初始状态,问N(1 <= N <= 7)步旋转操作以内最多能使几个面相同. dfs搜索+剪枝. 魔方的每个旋转操作即对应于一个置换操作.又因为相对运动,上层左旋一次和下层 ...

  3. 简单说 用CSS做一个魔方旋转的效果

    说明 魔方大家应该是不会陌生的,这次我们来一起用CSS实现一个魔方旋转的特效,先来看看效果图! 解释 我们要做这样的效果,重点在于怎么把6张图片,摆放成魔方的样子,而把它们摆放成魔方的样子,重点在于用 ...

  4. java 笔试题 字符串旋转

    package com.shb.java; /** * 取出第一个重复的字符 * @author shaobn * @date 2016-9-28 * @package_name com.shb.ja ...

  5. java读取jpg图片旋转按比例缩放

    //入口 public static BufferedImage constructHeatWheelView(int pageWidth, int pageHeight, DoubleHolder ...

  6. Java实现 LeetCode 796 旋转字符串 (水题)

    796. 旋转字符串 给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' .如果在若干次旋转 ...

  7. Java实现 LeetCode 788 旋转数字(暴力)

    788. 旋转数字 我们称一个数 X 为好数, 如果它的每位数字逐个地被旋转 180 度后,我们仍可以得到一个有效的,且和 X 不同的数.要求每位数字都要被旋转. 如果一个数的每位数字被旋转以后仍然还 ...

  8. Java实现 LeetCode 396 旋转函数

    396. 旋转函数 给定一个长度为 n 的整数数组 A . 假设 Bk 是数组 A 顺时针旋转 k 个位置后的数组,我们定义 A 的"旋转函数" F 为: F(k) = 0 * B ...

  9. Java实现 LeetCode 189 旋转数组

    189. 旋转数组 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输入: [1,2,3,4,5,6,7] 和 k = 3 输出: [5,6,7,1,2,3,4] ...

随机推荐

  1. flink批处理从0到1学习

    一.DataSet API之Data Sources(消费者之数据源) 介绍: flink提供了大量的已经实现好的source方法,你也可以自定义source 通过实现sourceFunction接口 ...

  2. 华为的快服务智慧平台是牛皮还是牛B?

    华为快服务智慧平台是牛皮还是牛B?   来到快服务论坛专区的老铁们想必对快服务有一定的了解,那么作为华为快服务统一接入分发核心的华为快服务智慧平台是怎样的存在呢?想必带着眼睛阅读的小伙伴都已经看出来了 ...

  3. JS导出页面为PDF文件,该如何操作?来看一眼就明白啦!

    1.资源文件或依赖 <script type="text/javascript" src="./js/canvg2.js"></script& ...

  4. CentOS7.2 安装 MongoDB 3.4

    服务器版本 CentOS7.2 MongoDB版本 3.4 1/ 下载所需资源 阿里镜像地址 http://mirrors.aliyun.com/mongodb/yum/redhat/7/mongod ...

  5. 洛谷P1027题解

    https://www.luogu.org/problem/P1027传送到题目 首先,让我骂一句那没事找事的Car还取一个那么奇怪的名字看到这个题,恕我直言,我们明显可以看出这是一道图的最短路问题. ...

  6. python Lambda, filter, reduce and map

    1. lambda The lambda operator or lambda function is a way to create small anonymous functions , i.e. ...

  7. Redux:data flow

    我们使用react,是为了构建可复用的高性能的视图层,学习redux是为了处理视图组件中随应用复杂度提升而变得难以控制的state.说白了,是为了视图. 在了解了action.reducer和stor ...

  8. Redis-Redis基本类型及使用Java操作

    1 Redis简介     Redis(REmote Dictionary Server)是一个使用ANSI C编写的.开源的.支持网络的.基于内存的.可持久化的键值对存储系统.目前最流行的键值对存储 ...

  9. 0506static【重点】

    static[重点] [重点] 1.[没有对象] [没有对象] [没有对象] 2.static 修饰的是一个资源共享类型的变量 3.静态成员变量的基本使用规范 static修饰的成员变量只能通过静态方 ...

  10. 如何在ARM上运行k3s? 窥探k3s启动过程!,内附容器多平台包构建

    开始之前 最近在对华为云鲲鹏服务器(一种ARM服务器arm64)运行容器可行性做验证,顺便了解了很多ARM和容器相关的知识.一提到arm运行容器首先想到的是k3s,下面是用k3s快速搭建一个kuber ...