魔方可以对它的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. 关于前后端写入Cookie时domain的一个问题

    1.1. 前端 先假设有如下setCookie方法: function setCookie(name, value, day, path, domain) { day = day || 30; pat ...

  2. OPTICS聚类算法原理

    OPTICS聚类算法原理 基础 OPTICS聚类算法是基于密度的聚类算法,全称是Ordering points to identify the clustering structure,目标是将空间中 ...

  3. python --error整理(不定时更新)

    1.TabError: inconsistent use of tabs and spaces in indentation Python 中需要用tab 键来空格 2.SyntaxError: in ...

  4. Python中内置函数

    python提供了很多的内置函数,这些内置的函数在某些情况下,可以起到很大的作用,而不需要专门去 写函数实现XX功能,直接使用内置函数就可以实现,下面分别来学习内置函数的使用和案例代码. abs(), ...

  5. C# Sign In With Apple苹果登陆后端验证

    苹果App授权登录 苹果官方的授权文档: 生成Token:https://developer.apple.com/documentation/sign_in_with_apple/generate_a ...

  6. quartzJob

    定时任务的时间修改.暂停.立即执行 定时任务的修改.暂停主要是调用quartz内置方法pauseJob().resumeJob().triggerJob()等方法 //暂停一个job JobKey j ...

  7. iptables做nat网络地址转换

    iptables做nat网络地址转换. 0. 权威文档 http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO-6.html e文好的直接跳过本文 ...

  8. xml rpc SimpleXMLRPCServer [python]

    SimpleXMLRPCServe 其实里面xml的概念不是很强,主要是rpc !不用关心什么xml . rpc 是就是远程调用,把函数什么的放到远程服务器上,本地调用就行了.用 SimpleXMLR ...

  9. 【雕爷学编程】Arduino动手做(48)---三轴ADXL345模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...

  10. 【雕爷学编程】Arduino动手做(42)---PM2.5粉尘传感器

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践(动手试试)出真知的理念,以学习和交流为目的,这里准备 ...