魔方可以对它的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. php对接金蝶系统

    金蝶系统是强大的财务系统,可对公司的财务进行整理,所以有的时候需要去我php系统来对接金蝶系统,为金蝶系统生成各种单据.下面是php对接金蝶的流程. 各种方法已经封装好,直接可以调用就行了. 1.如果 ...

  2. NOI Online #2 赛后题解

    color 题意 \(\;\) 给定\(p_1,p_2\),要求\(p_1\)的倍数格子填红色,\(p_2\)的倍数格子填蓝色,既是\(p_1\)又是\(p_2\)倍数的格子颜色任选.求是否存在一种填 ...

  3. HDU 2004 (水)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2004 题目大意: 给你成绩让你根据成绩打分解题思路: 简单的if...else 应用 需要注意是,if ...

  4. python监听、操作键盘鼠标库pynput详细教程

    § 0.0.0 前言 监听.操作鼠标.键盘是实现自动化的捷径,比如我实现自动化签到用到了模拟键盘操作. pynput是监听.操控鼠标和键盘的跨平台第三方python库. 你可以通过pip insnal ...

  5. 我的linux学习日记day8

    链接文件 linux中链接有两种,一种是硬链接,一种是软链接 一.硬链接 硬链接是指通过索引节点来进行链接创建硬链接的方法如下:ln 源文件 硬链接文件具有相同inode号的多个文件互为硬链接文件删除 ...

  6. 「雕爷学编程」Arduino动手做(17)---人体感应模块

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

  7. hdu3397 Sequence operation 线段树

    hdu3397 Sequence operation #include <bits/stdc++.h> using namespace std; ; struct node { /// l ...

  8. 使用Flutter开发的抖音国际版

    简介 最近花了两天时间研究使用Flutter开发一个抖音国际版. 先上图,个人感觉使用Flutter开发app快得不要不要的额.  两天就基本可以开发个大概出来.   最主要是热更新,太方便实时调整U ...

  9. Windows下搭建RabbitMQ环境

    1.下载安装Erlang 下载地址:https://www.erlang.org/downloads 下载之后,正常安装即可. 安装完毕之后,开始栏里会有个这图标: 2.下载安装RabbitMQ 下载 ...

  10. element 的 Cascader 级联选择器设定默认值

    Cascader 级联选择器 发现在很多的CRM管理系统里面,都有不少页面是用到这种级联选择器的,确实,功能很实用, 不过要设置默认值则应该让不少人头痛,因为你选择的时候 @change 事件的参数就 ...