华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

专栏导读

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

一、题目描述

九宫格按键输入,输出显示内容,有英文和数字两个模式,默认是数字模式,数字模式直接输出数字,英文模式连续按同一个按键会依次出现这个按键上的字母,如果输入" "或者其他字符,则循环中断。

字符对应关系如图:

在这里插入图片描述

二、输入描述

输入范围为数字0~9和字符#、/,输出屏幕显示,例如在数字模式下,输入1234,显示1234;在英文模式下,输入1234,显示,adg。

三、输出描述

#用于切换模式,默认是数字模式,执行#后切换为英文模式, /表示延迟,例如在英文模式下,输入22/222,显示为bc;

英文模式下,多次按同一键,例如输入22222,显示为b;

输入输出说明
123#222235/56123adjjm

四、解题思路

  1. 输入一个字符串input;
  2. 定义digitalMode,true表示数字模式,false表示英文模式,默认true;
  3. 定义变量right,表示英文模式下,连续按键模式停止的坐标;
  4. 定义builder,拼接最后的输出内容;
  5. 遍历input;
    • 如果输入" "或者其他字符,则循环中断;
    • 如果是#,切换模式;
    • 如果是/,表示延迟;
    • 如果是数字模式,直接拼接;
    • 如果是英文模式,获取下一个字符,判断与上一个字符是否相等;
      • 如果下一个字符和当前字符相等,则进入连续按键模式;
      • 如果下一个字符和当前字符相等,则表示连续模式结束,开始计算连续按键后输出的字母;
      • 计算连续按键后输出的字母;
      • 如果输入" "或者其他字符,则循环中断;
      • 计算连续按键后输出的字母完毕,开始遍历后面的字符;
  6. 输出最后的拼接字符串builder。

五、Java算法源码

public class OdTest04 {/*** #用于切换模式,默认是数字模式,执行#后切换为英文模式, /表示延迟* 如果输入" "或者其他字符,则循环中断。* 123#222235/56  --->  123adjjm* 123#2222#3#5//5556  --->  123a3jlm* 123#2222#3#50//5556  --->  123a3j* 123#22022#3#5//5556  --->  123b*/// 合法字符,如果输入" "或者其他字符,则循环中断static String effectiveLetter = "123456789#/";public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();// true表示数字模式,false表示英文模式,默认trueboolean digitalMode = true;// 英文模式下,连续按键模式停止的坐标int right = -1;// 最后的输出内容StringBuilder builder = new StringBuilder();for (int i = 0; i < input.length(); i++) {// 123#222235/56   i = 4,  3对应8,此时right=7,,,下次遍历从8开始if (right >= i) {continue;}char ch = input.charAt(i);// 如果输入" "或者其他字符,则循环中断if (!effectiveLetter.contains(ch + "")) {break;}switch (ch){case '#': // 切换模式digitalMode = !digitalMode;break;case '/': // /表示延迟break;default:// 数字模式if (digitalMode) {builder.append(ch);}else{ // 英文模式int sameCount = 1;boolean inputError = false;for (int j = i + 1; j < input.length(); j++) {// 下一个字符,判断与上一个字符是否相等char next = input.charAt(j);// 如果输入" "或者其他字符,则循环中断if (!effectiveLetter.contains(next + "")) {inputError = true;break;}// 表示延迟if (next == '/') {right = j;break;}// 如果下一个字符和当前字符相等,则进入连续按键模式if (ch == next) {// 123#222235/56   i = 4,  3对应8,此时right=7,,,下次遍历从8开始sameCount++;right = j;continue;} else {// 如果下一个字符和当前字符相等,则表示连续模式结束,开始计算连续按键后输出的字母break;}}// 计算连续按键后输出的字母char letter = getLetter(ch, sameCount);builder.append(letter);// 如果输入" "或者其他字符,则循环中断if (inputError) {break;} else {// 计算连续按键后输出的字母完毕,开始遍历后面的字符continue;}}break;}}// 最后的输出内容System.out.println(builder);}/*** 根据按键和连续的次数,获取对应的字母** @param ch        按键* @param sameCount 连续的次数*/static final String[] mapArr = {" ",",.?!","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};private static char getLetter(char ch, int sameCount) {String letter = mapArr[Integer.parseInt(String.valueOf(ch))];int index = (sameCount - 1) % letter.length();return letter.charAt(index);}
}

六、效果展示

1、输入

123#2222#3#5//5556

2、输出

123a3jlm

3、说明

  1. 遍历字符串123#2222#3#5//5556;
  2. #表示切换模式,/表示延迟;
  3. 123 --> 123;
  4. #切换到英文模式;
  5. 2222 --> a;
  6. #再次切换数字模式,3 --> 3;
  7. #再次切换英文模式,5 --> j;555 --> l;
  8. 6 --> m;
  9. 最后输出123a3jlm

在这里插入图片描述


🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)

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

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/211159.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统之部署Plik临时文件上传系统

Linux系统之部署Plik临时文件上传系统 一、Plik介绍1.1 Plik简介1.2 Plik特点 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查本地操作系统版本3.2 检查系统内核版本 四、下载Plik软件包4.1 创建下载目录4.2 下载Plik软件包4.3 查看下载的Plik软件…

Python sorted函数及用法以及如何用json模块存储数据

Python sorted函数及用法 sorted() 函数与 reversed() 函数类似&#xff0c;该函数接收一个可迭代对象作为参数&#xff0c;返回一个对元素排序的列表。 在交互式解释器中测试该函数&#xff0c;可以看到如下运行过程&#xff1a; >>> a [20, 30, -1.2, 3.5, 90, 3.…

【已解决】Win10端口被占用

​ 我总是在启动项目的时候失败&#xff0c;被告知端口号被占用&#xff0c;明明没有被占用(可能是系统卡了或者其它问题)&#xff0c;但是又不想改端口号&#xff0c;或者重启电脑&#xff0c;那怎么办呢&#xff1f; 第一步&#xff1a;打开命令行窗口&#xff0c;以管理员…

植物单细胞基础工程之标记基因数据库

前 言 单细胞转录组这把火已经爆燃到了植物领域。 单次实验即可获得上万个细胞的基因表达数据&#xff08;大老远都觉得香&#xff09;&#xff0c;直接把分辨率从组织水平干到了单个细胞水平&#xff08;当然&#xff0c;最后说事大多数还是基于细胞cluster或者sub cluster&…

vr工业制造流程3D模拟仿真可视化展示

工业仿真3D数字化展示系统具有多方面的独特之处&#xff0c;主要体现在以下几个方面&#xff1a; 1、真实感和交互性&#xff1a;该系统可以将实际的工业设备、产品、场景等进行数字化建模&#xff0c;通过三维图形技术将其呈现在计算机屏幕上&#xff0c;使用户可以在虚拟环境…

Matlab 加权均值质心计算(WMN)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 思路很简单,即将之前的均值中心,引入相关的权重函数(通常与距离有关),以此为每个点进行赋权,最后即可得到一个加权均值中心: 二、实现代码 %% ********<

vue+elementUI的tabs与table表格联动固定与滚动位置

有个变态的需求&#xff0c;要求tabs左侧固定&#xff0c;右侧是表格&#xff0c;点击左侧tab&#xff0c;右侧表格滚动到指定位置&#xff0c;同时&#xff0c;右侧滚动的时候&#xff0c;左侧tab高亮相应的item 上图 右侧的高度非常高&#xff0c;内容非常多 常规的瞄点不适…

stm32项目(11)——基于stm32的俄罗斯方块游戏机

1.功能设计 使用stm32f103zet6平台&#xff0c;以及一块LCD屏幕&#xff0c;实现了一个俄罗斯方块游戏机。可以用按键调整方块的位置、还可以控制方块下降的速度&#xff01; 2.视频演示 俄罗斯方块 3.俄罗斯方块发展史 俄罗斯方块是一种经典的拼图游戏&#xff0c;由苏联俄罗…

SpringBoot_02

Web后端开发_07 SpringBoot_02 SpringBoot原理 1.配置优先级 1.1配置 SpringBoot中支持三种格式的配置文件&#xff1a; application.propertiesapplication.ymlapplication.yaml properties、yaml、yml三种配置文件&#xff0c;优先级最高的是properties 配置文件优先级…

LoadRunner12.55的简介与安装

提示&#xff1a;https://mp.weixin.qq.com/s/iK-fh0VP7v8mNSDNxjkBow 文章目录 LoadRunner的简介与安装loadrunner概述loadrunner的下载与安装 LoadRunner的使用启用VuGen LoadRunner的简介与安装 LoadRunner官网&#xff1a;https://www.microfocus.com/zh-cn/products/load…

ESP Multi-Room Music 方案:支持音频实时同步播放 实现音乐互联共享

项目背景 随着无线通信技术的发展&#xff0c;针对不同音频应用领域的无线音频产品正不断涌现。近日&#xff0c;乐鑫科技推出了基于 Wi-Fi 的多扬声器互联共享音乐通信协议——ESP Multi-Room Music 方案。该方案使用乐鑫自研的基于 Wi-Fi 局域网的音频同步播放技术&#xff…

Pycharm修改文件默认打开方式 + CSV Editor插件使用

1、File —> Settings —> Editor —> File Types 然后将*csv添加到最上面 在plugins中下载插件&#xff0c;CSV Editor 备注&#xff1a;不在上一步的“File Types”中将*.csv设置为CSV格式&#xff0c;插件是不起作用的 就可以使用了

CRM在设备制造行业的应用,优化资源配置

设备制造业竞争激烈&#xff0c;公司要以客户为中心&#xff0c;搞好售后服务。CRM管理软件是设备制造业客户关系管理的重要工具。以下是CRM在设备制造业里的典型应用。 1.营销管理 制订市场策略&#xff1a;设备制造通常涉及较长的决策周期和销售周期。客户可能会在多家供货商…

PHP+vue+elementui高校学生社团信息管理系统o7q4a

社团是由高校用户依据兴趣爱好自愿组成&#xff0c;按照章程自主开展活动的用户组织。高校社团是实施素质教育的重要途径和有效方式&#xff0c;在加强校园文化建设、提高用户综合素质、引导用户适应社会、促进用户交流等方面发挥着重要作用&#xff0c;是新形势下有效凝聚用户…

win11安装(未完待续)

学习补丁 test.bat 运行后需要重启 slmgr /ipk W269N-WFGWX-YVC9B-4J6C9-T83GX slmgr /skms kms.03k.org slmgr /ato 文件扩展名 主题 性能设置 开始按钮靠左 任务栏对齐方式-靠左 必备软件 f.lux redshift 360管家 驱动精灵 edge c*lash&#xff08;v2*ray不支持w…

Python源码17:使用海龟画图turtle画五星红旗

turtle模块是一个Python的标准库之一&#xff0c;它提供了一个基于Turtle graphics的绘图库。Turtle graphics是一种流行的绘图方式&#xff0c;它通过控制一个小海龟在屏幕上移动来绘制图形。 turtle模块可以让您轻松地创建和控制海龟图形&#xff0c;从而帮助您学习Python编…

首次超越1000量子比特大关!量子前哨详解IBM突破性进展

&#xff08;图片来源&#xff1a;网络&#xff09; 本周&#xff0c;IBM在其年度量子峰会上宣布&#xff0c;公司已在量子计算领域取得重要突破。其中包括备受期待的1121量子比特Condor QPU&#xff0c;以及一个较小的133量子比特Heron QPU&#xff0c;这些QPU能够与其他QPU组…

java springboot简单了解数据源实现 与 springboot内置数据源

之前 我们讲到的项目 数据库管理 用了三种技术 数据源管理方式 我们选择了: DruidDataSource 持久化技术: MyBatis-Plus / MyBatis 数据库: MySql 那么 我们在刚接触数据库连接时 是没用配置Druid的 那它有没有用数据源呢&#xff1f; 我们接触过的配置Druid的方式有两种 用…

揭秘AI魔法绘画:Stable Diffusion引领无限创意新纪元

文章目录 1. 无限的创意空间2. 高效的创作过程3. 个性化的艺术表达4. 跨界合作的可能性5. 艺术教育的革新6. 艺术市场的拓展 《AI魔法绘画&#xff1a;用Stable Diffusion挑战无限可能》编辑推荐内容简介作者简介精彩书评目录前言/序言本书读者对象学习建议获取方式 随着科技的…

【IEEE独立出版】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)

2024第四届神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff09; 2024 4th International Conference on Neural Networks, Information and Communication Engineering 2024第四神经网络、信息与通信工程国际学术会议&#xff08;NNICE 2024&#xff0…