华为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/56 | 123adjjm |
四、解题思路
- 输入一个字符串input;
- 定义digitalMode,true表示数字模式,false表示英文模式,默认true;
- 定义变量right,表示英文模式下,连续按键模式停止的坐标;
- 定义builder,拼接最后的输出内容;
- 遍历input;
- 如果输入" "或者其他字符,则循环中断;
- 如果是#,切换模式;
- 如果是/,表示延迟;
- 如果是数字模式,直接拼接;
- 如果是英文模式,获取下一个字符,判断与上一个字符是否相等;
- 如果下一个字符和当前字符相等,则进入连续按键模式;
- 如果下一个字符和当前字符相等,则表示连续模式结束,开始计算连续按键后输出的字母;
- 计算连续按键后输出的字母;
- 如果输入" "或者其他字符,则循环中断;
- 计算连续按键后输出的字母完毕,开始遍历后面的字符;
- 输出最后的拼接字符串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、说明
- 遍历字符串123#2222#3#5//5556;
- #表示切换模式,/表示延迟;
- 123 --> 123;
- #切换到英文模式;
- 2222 --> a;
- #再次切换数字模式,3 --> 3;
- #再次切换英文模式,5 --> j;555 --> l;
- 6 --> m;
- 最后输出123a3jlm

🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)
🏆本文收录于,华为OD机试(JAVA)真题(A卷+B卷)
刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

相关文章:
华为OD机试 - 九宫格按键输入 - 逻辑分析(Java 2023 B卷 200分)
目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷&#…...
leetcode:225. 用队列实现栈
一、题目 链接:225. 用队列实现栈 - 力扣(LeetCode) 函数原型: typedef struct { } MyStack; MyStack* myStackCreate() void myStackPush(MyStack* obj, int x) int myStackPop(MyStack* obj) int myStackTop(MyStack* obj) …...
Centos7安装GItLab(在线版)
基础环境准备 1.配置清华大学镜像仓库 新建仓库配置文件使用 vim /etc/yum.repos.d/gitlab-ce.repo 命令,输入以下内容,保存 [gitlab-ce] nameGitlab CE Repository baseurlhttps://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/ gpgcheck0 enabl…...
Linux入门笔记
1 Linux概述 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心…...
nvm for windows使用与node/npm/yarn的配置
1 下载 nvm for windows download – github 下拉到Assets, 下载.exe文件 2 安装 安装到如下文件夹中 目录可以自己选, 可以换别的名字, 自己记住即可 新手建议全部看完再进行个人配置, 或者使用与博主一致的路径 D:\DevelopEnvironment\nvm3 配置nvm使用的镜像 node_mir…...
打工人副业变现秘籍,某多/某手变现底层引擎-StableDiffusionWebUI界面基本布局和操作
一、界面设置 文生图:根据文本提示生成图像 图生图:图像生成图像;功能很强大,自己在后续使用中探索。 后期处理:图片处理;功能很强大,自己在后续使用中探索。 PNG信息:这是一个快速获取图片生成参数的便捷功能。如果图像是在SD里生成的,您可以使用“发送到”按钮将…...
01、pytest:帮助你编写更好的程序
简介 pytest框架可以很容易地编写小型、可读的测试,并且可以扩展以支持应用程序和库的复杂功能测试。使用pytest至少需要安装Python3.7或PyPy3。PyPI包名称为pytest 一个快速的例子 # content of test_sample.py def inc(x):return x1def test_ansewer():asser…...
C语言--每日选择题--Day37
第一题 1. 有以下说明语句:则下面引用形式错误的是() struct Student {int num;double score; };struct Student stu[3] {{1001,80}, {1002,75}, {1003,91}} struct Student *p stu; A:p->num B:(p).num C&#…...
Android 12 及以上授权精确位置和模糊位置
请求位置信息权限 为了保护用户隐私,使用位置信息服务的应用必须请求位置权限。 请求位置权限时,请遵循与请求任何其他运行时权限相同的最佳做法。请求位置权限时的一个重要区别在于,系统中包含与位置相关的多项权限。具体请求哪项权限以及…...
scp 指令详细介绍
目录 1. 基本语法 2. 例子 从本地到远程 从远程到本地 从远程到远程 使用端口和指定私钥 递归复制目录 3. 注意事项 如何拷贝文件的软链接 SCP(Secure Copy Protocol)是一种用于在计算机之间安全地传输文件的协议。它通过加密的方式在网络上安全…...
构建第一个事件驱动型 Serverless 应用
我相信,我们从不缺精彩的应用创意,我们缺少的把这些想法变成现实的时间和付出。 我认为,无服务器技术真的有助于最大限度节省应用开发和部署的时间,并且无服务器技术用可控的成本,实现了我的那些有趣的想法。 在我 2…...
特征与特征图的区别
1.特征图是什么? 特征图是指在卷积神经网络中,通过卷积操作从输入图像中提取出来的图像特征。在卷积神经网络中,每一层的输出都是一个三维张量,其中第三维表示特征图的数量。每个特征图都是由若干个卷积核对上一层的特征图进行卷…...
Linux学习笔记之七(shell脚本的基本语法)
Shell 1、Shell脚本2、常用运算符2、特殊语法4、关于变量的一些命令4.1、echo4.2、export4.3、read4.4、declare/typeset4.5、local4.6、unset 5、基本逻辑语法5.1、if判断5.2、for循环5.3、while循环5.4、case语句 6、函数定义7、多脚本链接 1、Shell脚本 学习shell脚本开发之…...
PySpark开发环境搭建常见问题及解决
PySpark环境搭建常见问题及解决 1、winutils.exe问题2、SparkURL问题3、set_ugi()问题 本文主要收录PySpark开发环境搭建时常见的一些问题及解决方案,并收集一些相关资源 1、winutils.exe问题 报错摘要: WARN Shell: Did not find winutils.exe: {} ja…...
supervisor管理启动重启,Java,Go程序Demo
简介 Supervisor 是一款 Python 开发的进程管理系统,允许用户监视和控制 Linux 上的进程,能将一个普通命令行进程变为后台守护进程,异常退出时能自动重启 1、安装 yum -y install supervisor2、配置默认配置文件 echo_supervisord_conf &g…...
HarmonyOs 4 (三) ArkTS语言
目录 一 认识ArkTs语言1.1 ArkTs1.2 基本结构 二 基本语法2.1 声明式UI2.1.1 创建组件2.1.1.1 无参数2.1.1.2 有参数2.1.1.3 组件样式2.1.1.4 组件方法2.1.1.5 组件嵌套 2.1.2 自定义组件2.1.2.1 基本结构2.1.2.2 成员函数/变量2.1.2.3 自定义组件的参数规定2.1.2.4 Build函数2…...
PostGIS学习教程九:空间连接
PostGIS学习教程九:空间连接 空间连接(spatial joins)是空间数据库的主要组成部分,它们允许你使用空间关系作为连接键(join key)来连接来自不同数据表的信息。我们认为“标准GIS分析”的大部分内容可以表示…...
C++ day56 两个字符串的删除操作 编辑距离
题目1:583 两个字符串的删除操作 题目链接:两个字符串的删除操作 对题目的理解 返回使两个单词word1和word2相同的最少删除多少个元素,两个单词至少包含一个字母,且仅包含小写字母 思路1:这道题与昨天的不同子序列…...
Android studio中如何生成jar包?
文章目录 需求背景目录结构gradle结构makeJar的语法解析 执行makeJar 任务拿到jar包 需求背景 别部门做C语言开发的同学开发了一个库,需要给我们Android端去调用。 我们拿到源码,首先需要做的是通过CMake去把C源码编译链接成动态库。 当然静态库也行&am…...
【2】基于多设计模式下的同步异步日志系统-设计模式
6. 相关技术知识补充 6.1 不定参函数 在初学C语⾔的时候,我们都⽤过printf函数进⾏打印。其中printf函数就是⼀个不定参函数,在函数内部可以根据格式化字符串中格式化字符分别获取不同的参数进⾏数据的格式化。 ⽽这种不定参函数在实际的使⽤中也⾮常…...
基于大语言模型的网页自动化智能体:Elsa OpenClaw 实战指南
1. 项目概述与核心价值 最近在折腾一些自动化流程,发现很多重复性的网页操作,比如数据抓取、表单填写、状态监控,手动来做不仅耗时,还容易出错。于是我开始寻找一个能真正理解网页结构、像人一样操作浏览器的工具。市面上有不少自…...
Midjourney V6 acrylic paint提示词工程:从模糊描述到精准输出的12个专业级Prompt模板(含色彩层厚/笔触硬度/画布纹理三重控制)
更多请点击: https://intelliparadigm.com 第一章:Midjourney V6丙烯画风格的核心演进与底层渲染机制 Midjourney V6 对丙烯画(Acrylic Painting)风格的建模已脱离早期依赖纹理叠加与后处理滤镜的粗粒度模拟,转向基于…...
终极指南:BepInEx 6.0插件框架如何彻底解决Unity游戏模组开发的稳定性难题
终极指南:BepInEx 6.0插件框架如何彻底解决Unity游戏模组开发的稳定性难题 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一个革命性的Unity游戏插件与模组开…...
彻底告别Ubuntu 20.04休眠唤醒黑屏:除了降级驱动,你还可以这样一劳永逸地禁用挂起
彻底告别Ubuntu 20.04休眠唤醒黑屏:系统级电源管理优化指南 如果你正在使用Ubuntu 20.04并频繁遭遇休眠唤醒后的黑屏问题,这篇文章将为你提供一套完整的解决方案。不同于常见的驱动降级方案,我们将从系统配置层面入手,通过调整电源…...
AI Agent(智能体)的输出格式应该从 Markdown 转向 HTML吗?
在近期(2026年5月)的技术圈和AI社区引发了非常热烈的讨论。提出这个观点的是 Anthropic(Claude背后的公司)负责 Claude Code 团队的工程师 Thariq Shihipar,他最近发表了一篇题为《使用 Claude Code:HTML 极…...
【信息科学与工程学】【通信工程】第四十三篇 骨干网方案设计-02跨境网络
一、方案 1.1 整体方案设计概要 设计的云网融合方案,综合考虑其全球互联需求、安全合规性、性能优化及跨国运营挑战: 1.1.1、需求分析 网络互联需求: 国内互通: 安全、稳定、低延迟连接中国大陆(严格合规要求)。 国际互通: 高性能连接美国(东西海…...
截稿!NeurIPS 2026 投稿微信群成立
点击下方卡片,关注“CVer”公众号AI/CV重磅干货,第一时间送达点击进入—>【顶会/顶刊】投稿交流群添加微信:CVer2233,助手会拉你进群!扫描下方二维码,加入CVer学术星球!可获得最新顶会/顶刊上…...
从Nginx到你的Go服务:聊聊CPU亲和性(绑核)那些容易被忽略的细节与坑
从Nginx到Go服务:CPU亲和性实战中的高阶策略与避坑指南 当你的服务吞吐量突然下降30%,而监控显示CPU利用率仅有50%时,问题可能出在CPU缓存失效和跨核调度开销上。上周我们团队刚解决一个生产环境案例:某Go语言交易引擎在物理机16核…...
Zotero茉莉花插件:3大核心功能彻底解决中文文献管理难题
Zotero茉莉花插件:3大核心功能彻底解决中文文献管理难题 【免费下载链接】jasminum A Zotero add-on to retrive CNKI meta data. 一个简单的Zotero 插件,用于识别中文元数据 项目地址: https://gitcode.com/gh_mirrors/ja/jasminum 还在为Zotero…...
性价比好的深圳除甲醛公司
深圳作为高密度开发城市,常年保持稳定的新房交付、写字楼翻新与商铺装修需求,装修带来的甲醛残留问题,始终是业主和企业管理者关注的室内安全重点。目前深圳本地已有大量除甲醛服务机构,消费者可根据自身需求筛选适配的服务主体。…...
