魔方可以对它的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. python解析excel中图片+提取图片

    解析表格是常用的技术.但是有些表各里面有图片怎么办?我想获得表格里面的图片,值得注意的是,图片没有位置信息,所以最好给图片进行编号,编号代表位置. 下面附上提取表格里面图片的代码.只要输出表格地址,和 ...

  2. xilinx VDMA IP核使用

    VDMA实用配置说明 VDMA是通过AXI Stream协议对视频数据在PS与PL端进行搬运,开发者无需关注AXI Stream协议,在BlockDesign设计中只需要把相应信号进行连接即可. VD ...

  3. 7、会话框添加查看get与post请求类型

    前言 在使用fiddler抓包的时候,查看请求类型get和post每次只有点开该请求,在Inspectors才能查看get和post请求,不太方便.于是可以在会话框直接添加请求方式. 一.添加会话框菜 ...

  4. Java—线程的生命周期及线程控制方法详解

    线程生命周期5种状态 介绍   线程的生命周期经过新建(New).就绪(Runnable).运行(Running).阻塞(Bolocked)和死亡(Dead) 状态转换图 新建(New)   程序使用 ...

  5. virtualbox复制了以后网卡启动不了。

    还是有些坑..必须踩 virtualbox复制了以后网卡启动不了.原因是如果没选重新生成mac ,那么mac地址会和第一台 机器一模一样,出现ip 征用的情况. 第二是系统方面的原因,你要删一个文件, ...

  6. 微信小程序上传文件时弹出当前系统代理不是安全代理,是否信任

    我的开发环境是.net core 启用了https,而微信的开发者工具不认这个证书. 解决办法1:关闭https 然后在 Startup.cs 中关闭注释掉 app.UseHttpsRedirecti ...

  7. 10 分离式web框架

    10 分离式web框架 wsgiref模块: 将http请求封装成以键值对的形式封装成字典environ: "PATH_INFO"对应的值为请求文件路径, “QUERY_STRIN ...

  8. H3C S5500V2交换机误格式化恢复

    一.格式化后,bin文件及视图全部被删除需要联系H3C客服报交换机后面的序列号,然后根据工单中给你的账号密码去H3C官网下载对应的软件包. 二.下载3CDaemon使用TFTP方式将解压出来的.ipe ...

  9. create-react-app ios8系统中页面空白/样式错乱问题

    1. 空白问题 因为缺少polyfill 在public/index.html 中引入如下js <script src="https://cdnjs.cloudflare.com/aj ...

  10. Mysql 查询指令 1

    一.查询两个时间字段相减的差值 >>> (TIME_TO_SEC(时间字段一) select bl_no, task_result, carrier_code, task_start ...