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

news2024/10/5 22:12:46

在这里插入图片描述

华为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.coloradmin.cn/o/2190612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AIGC实践|AI助力文旅短视频创作全流程

前言: 受到央视《AI我中华》及各地文旅AI宣传片的启发,本次我将尝试使用AI辅助进行城市宣传片的创作探索。我将尽可能详细的展示使用AI辅助创作城市宣传片的全过程,从灵感捕捉到最终成品呈现。现在,让我们一同踏上这段充满创意的探…

中国剩余定理专题

按照m之间的性质来决定采用什么方法 是否互质? 互质——中国剩余定理 不互质——拓展欧几里得 拓展中国剩余定理 互质情况下,是否均为质数? 是—— 费马小定理求逆元 否——拓展欧几里得求逆元 互质条件下的拓展欧几里得中国剩余定理 题…

Spring Boot框架:新闻推荐系统开发新趋势

3系统分析 3.1可行性分析 通过对本新闻推荐系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本新闻推荐系统采用JAVA作为开发语言,Spring Boot框…

序列化与反序列化基础及反序列化漏洞(附案例)

参考文章: [web安全原理]PHP反序列化漏洞 - 笑花大王 - 博客园 (cnblogs.com) 一、概念 为了能有效的存储数据而不丢失数据的类型和内容,经常需要通过序列化对数据进行处理,将数据进行序列化后,会生成一个字符串,字符…

冯诺依曼体系结构与操作系统简介

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 冯诺依曼体系结构与操作系统简介 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1.…

CSP-J Day 5 模拟赛补题报告

姓名:王胤皓,校区:和谐校区,考试时间: 2024 2024 2024 年 10 10 10 月 5 5 5 日 9 : 00 : 00 9:00:00 9:00:00~ 12 : 30 : 00 12:30:00 12:30:00,学号: S 07738 S07738 S07738 请关注作者的…

分治算法(1)_颜色分类

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 分治算法(1)_颜色分类 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 分治思…

PostgreSQL 任意命令执行漏洞(CVE-2019-9193)

记一次授权攻击通过PostgreSql弱口令拿到服务器权限的事件。 使用靶机复现攻击过程。 过程 在信息收集过程中,获取到在公网服务器上开启了5432端口,尝试进行暴破,获取到数据库名为默认postgres,密码为1 随后连接进PostgreSql …

(杨辉三角) 攻防世界--->notsequence

学习笔记。(不想看可以直接跳正文。) 前言:仿佛又回到高中 - - 只不过,是以另一种形式再次出现。 学习思维为主,做题位次。(后面再补。) 前置知识: 什么是杨辉三角: 杨辉三角_百度百科 (bai…

【CSS in Depth 2 精译_045】7.1 CSS 响应式设计中的移动端优先设计原则(上)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

MySQL【知识改变命运】02

数据类型 1:数据值类型2:字符串类型/二进制类型3:⽇期类型 前言:数据类型一共分为四类:数据值类型,字符串类型,二进制类型,日期类型。 1:数据值类型 类型大小说明BIT[(M…

Spring Boot 集成 Flowable UI 实现请假流程 Demo

​ 博客主页: 南来_北往 系列专栏:Spring Boot实战 在现代企业应用中,工作流管理是一个至关重要的部分。通过使用Spring Boot和Flowable,可以方便地构建和管理工作流。本文将详细介绍如何在Spring Boot项目中集成Flowable UI&#xff0c…

【Java】—— 泛型:泛型的理解及其在集合(List,Set)、比较器(Comparator)中的使用

目录 1. 泛型概述 1.1 生活中的例子 1.2 泛型的引入 2. 使用泛型举例 2.1 集合中使用泛型 2.1.1 举例 2.1.2 练习 2.2 比较器中使用泛型 2.2.1 举例 2.2.2 练习 1. 泛型概述 1.1 生活中的例子 举例1:中药店,每个抽屉外面贴着标签 举例2&…

Chromium 添加书签功能浅析c++

1、在点击添加书签时候此UI控制逻辑代码在 chrome\browser\ui\views\bookmarks\bookmark_bar_view.cc chrome\browser\ui\views\bookmarks\bookmark_bar_view.h 可以在此看到完成 移除 按钮逻辑,以及书签监听事件等。。。 // Implementation for BookmarkNodeAdd…

FastAdmin Apache下设置伪静态

FastAdmin Apache下设置伪静态 一、引言 FastAdmin 是一个基于ThinkPHP和Bootstrap框架开发的快速后台开发框架,它以其简洁、高效、易于扩展的特点,广受开发者的喜爱。在部署FastAdmin项目时,为了提高访问速度和用户体验,我们通…

VLAN:虚拟局域网

VLAN:虚拟局域网 交换机和路由器协同工作后,将原先的一个广播域,逻辑上,切分为多个广播域。 第一步:创建VLAN [SW1]dispaly vlan 查询vlan VID(VLAN ID):用来区分和标定不同的vlan 由12位二进制构成 范围: 0-4…

[3D打印]拓竹切片软件Bambu Studio使用

Bambu Studio 界面功能 材料 不同材料 一般使用的是PLA, PETG, ABS PLA(57℃), PETG(66℃)的强度以及耐高温的能力比较差, ABS有味道, 不环保但是强度比较高(85℃) TPU: 不支持AMS, 数字小硬度小, 打印出来有亮光 TPE: 和上面一样, 打印出来是哑光的, 但是打印的难度比较…

物联网智能项目(含案例说明)

物联网(Internet of Things,简称IoT)智能项目是指利用物联网技术将各种物理设备、传感器、软件、网络等连接起来,实现设备之间的互联互通,并通过数据采集、传输、处理和分析,实现智能化管理和控制的项目。以…

Docker_速通_01

Docker Docker笔记连接相关概念如下安装运行命令 命令镜像容器run细节根据容器制作新镜像对正在运行容器的修改,保存为镜像保存成文件加载文件成镜像 分享镜像登录修改名字 docker tag推送镜像 目录挂载卷映射创建卷 容器之间直接访问查看容器细节容器内部互相访问自定义网络创…

[NeurIPS 2022] STaR: Bootstrapping Reasoning With Reasoning

Contents IntroductionMethodExperimentsReferences Introduction CoT 推理可以有效提升 LLM 推理能力,但 few-shot prompting 无法发挥 CoT 的全部潜力,训练能够生成中间推理步骤 (i.e., rationale) 的 LLM 又需要大量人工标注 rationale,为…