当前位置: 首页 > news >正文

华为OD机试 - 转骰子(Java 2024 E卷 100分)

在这里插入图片描述

华为OD机试 2024E卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)》。

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

假设有一个立方体,每个面有一个数字,初始为:前1,右2,前3(观察者方向),后4,上5,下6,用123456表示这个状态,放置在平面上。

  • 可以向左翻转(用L表示向左翻转1次);
  • 可以向右翻转(用R表示向右翻转1次);
  • 可以向前翻转(用F表示向前翻转1次);
  • 可以向后翻转(用B表示向后翻转1次);
  • 可以以逆时针旋转(用A表示逆时针旋转90度);
  • 可以以顺时针旋转(用C表示顺时针旋转90度)。

现在从123456这个初始状态开始,根据输入的动作/指令,计算得出最终的状态。

在这里插入图片描述

二、输入描述

输入一行,为只包含LRFBAC的字母序列,最大长度为50,字母可重复。

三、输出描述

输出最终状态。

四、测试用例

测试用例1:

1、输入

LR

2、输出

123456

3、说明

立方体先向左翻转,再向右翻转回去,最终还是恢复到初始状态123456。

测试用例2:

1、输入

FCR

2、输出

342156

3、说明

立方体先向前翻转,状态变为125643,然后顺时针旋转,状态变为651243,最后向右翻转,状态变为342156。

五、解题思路

模拟一个立方体在平面上的翻转和旋转操作。立方体有六个面,分别标记为左(Left)、右(Right)、前(Front)、后(Back)、上(Up)、下(Down),每个面上有一个数字。初始状态为123456,表示左1、右2、前3、后4、上5、下6。

每个操作(L、R、F、B、A、C)会改变立方体各面的数字位置。为了实现这一点,我们可以使用一个长度为6的数组state来表示立方体的六个面,索引分别对应左、右、前、后、上、下。每个操作对应一个特定的数组置换,通过预定义的旋转方法rotate来实现。

  1. 定义立方体状态:使用一个长度为6的数组state来表示立方体的六个面,索引分别对应左、右、前、后、上、下。
  2. 实现旋转方法:定义一个通用的旋转方法rotate,用于交换立方体上四个面的值。每个具体的操作(L、R、F、B、A、C)将调用rotate方法,传入相应的面索引。
  3. 读取输入并执行操作:使用Scanner读取输入的操作序列,逐个执行对应的操作方法。
  4. 输出最终状态:按照左、右、前、后、上、下的顺序输出state数组中的数字。

六、Java算法源码

public class OdTest01 {public static void rotate(int[] state, int a, int b, int c, int d) {int temp = state[a];  // 临时保存第一个面的值state[a] = state[b];  // 第二个面的值赋给第一个面state[b] = state[c];  // 第三个面的值赋给第二个面state[c] = state[d];  // 第四个面的值赋给第三个面state[d] = temp;      // 第一个面的值赋给第四个面}/*** 向左翻转 (L):* 将左 -> 上 -> 右 -> 下 -> 左*/public static void turnL(int[] state) {rotate(state, 0, 4, 1, 5); // 左->上->右->下->左}/*** 向右翻转 (R):* 将左 -> 下 -> 右 -> 上 -> 左*/public static void turnR(int[] state) {rotate(state, 0, 5, 1, 4); // 左->下->右->上->左}/*** 向前翻转 (F):* 将前 -> 上 -> 后 -> 下 -> 前*/public static void turnF(int[] state) {rotate(state, 2, 4, 3, 5); // 前->上->后->下->前}/*** 向后翻转 (B):* 将前 -> 下 -> 后 -> 上 -> 前*/public static void turnB(int[] state) {rotate(state, 2, 5, 3, 4); // 前->下->后->上->前}/*** 逆时针旋转 (A):* 将左 -> 后 -> 右 -> 前 -> 左*/public static void turnA(int[] state) {rotate(state, 0, 3, 1, 2); // 左->后->右->前->左}/*** 顺时针旋转 (C):* 将左 -> 前 -> 右 -> 后 -> 左*/public static void turnC(int[] state) {rotate(state, 0, 2, 1, 3); // 左->前->右->后->左}public static void main(String[] args) {// 创建一个扫描器对象,用于读取用户输入的指令序列Scanner scanner = new Scanner(System.in);String s = scanner.next();  // 从输入中读取一串动作指令// 初始状态:立方体各个面的编号,依次表示 左、右、前、后、上、下。int[] state = {1, 2, 3, 4, 5, 6};  // 初始状态: 左1,右2,前3,后4,上5,下6// 遍历输入的每一个字符,根据指令执行相应的操作for (char ch : s.toCharArray()) {switch (ch) {case 'L':turnL(state); // 执行左翻转break;case 'R':turnR(state); // 执行右翻转break;case 'F':turnF(state); // 执行前翻转break;case 'B':turnB(state); // 执行后翻转break;case 'A':turnA(state); // 执行逆时针旋转break;case 'C':turnC(state); // 执行顺时针旋转break;default:// 忽略无效字符break;}}// 输出最终立方体的六个面状态,按照左、右、前、后、上、下的顺序for (int num : state) {System.out.print(num);}}
}

七、效果展示

1、输入

A

2、输出

431256

3、说明

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 E卷 200分)

🏆本文收录于,华为OD机试(JAVA)真题(E卷+D卷+A卷+B卷+C卷)

刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述


http://www.mrgr.cn/news/43374.html

相关文章:

  • Linux中环境变量
  • 普渡PUDU MT1:AI赋能,破解大面积场景清洁新挑战
  • 97. UE5 GAS RPG 实现闪电链技能(二)
  • 动态SLAM总结一
  • wsl中git difftool調用beyond compare
  • String类
  • 冯诺依曼体系结构与操作系统简介
  • 【Linux:线程控制】
  • 数据结构篇(绪论)
  • LSM6DSV16X基于MLC智能笔动作识别(3)----MEMS Studio训练数据
  • 电源管理芯片PMIC
  • 十一、扩展和补充
  • Linux进程调度和进程切换
  • 【ECMAScript 从入门到进阶教程】第四部分:项目实践(项目结构与管理,单元测试,最佳实践与开发规范,附录)
  • Java - MyBatis(上)
  • ffmpeg源码分析(七)结构体之AVStream
  • VikParuchuri/marker 学习简单总结
  • STL06——手写一个简单版本的set
  • C++ 语言特性30 - 模板介绍
  • leetcode42:接雨水