华为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函数就是⼀个不定参函数,在函数内部可以根据格式化字符串中格式化字符分别获取不同的参数进⾏数据的格式化。 ⽽这种不定参函数在实际的使⽤中也⾮常…...
第十五届蓝桥杯模拟赛B组(第二期)C++
前言: 第一次做蓝桥模拟赛的博客记录,可能有很多不足的地方,现在将第十五届蓝桥杯模拟赛B组(第二期)的题目与代码与大家进行分享,我是用C做的,有好几道算法题当时自己做的也是一脸懵,…...
企业ERP软件定制开发要注意|app小程序搭建
企业ERP软件定制开发要注意|app小程序搭建 企业ERP软件定制开发是一项复杂而且关键的任务,它需要深入理解企业的需求和流程,并且以此为基础进行设计和开发。以下是一些关于企业ERP软件定制开发的注意事项。 首先,我们必须确保在进行定制开发之…...
系统架构设计-权限模块的设计
系统架构-权限模块的设计 如何评估一个研发人员技术水平,在大部分的情况下不是看其完成业务代码的好坏,更多的时候还是需要看这个研发人员从零构建一个完整项目的能力,在大公司中这样的机会可能相对较少,大部分的时间里都是对现有…...
IDEA切换Python虚拟环境
前言 因为之前一直使用的IDEA开发,换到VSCODE之后各种不习惯,特别是DEBUG的操作,特别难受,因此决心换回IDEA 环境配置 已有项目调整 进入Project 选择SDKs,新建Python 配置Conda以及虚拟环境 有就选择一个虚拟环境…...
《opencv实用探索·十一》opencv之Prewitt算子边缘检测,Roberts算子边缘检测和Sobel算子边缘检测
1、前言 边缘检测: 图像边缘检测是指在图像中寻找灰度、颜色、纹理等变化比较剧烈的区域,它们可能代表着物体之间的边界或物体内部的特征。边缘检测是图像处理中的一项基本操作,可以用于人脸识别、物体识别、图像分割等多个领域。 边缘检测…...
prime靶机打靶记录
靶机下载地址 https://download.vulnhub.com/prime/Prime_Series_Level-1.rar nmap搜索目标 使用nmap -sn 192.168.41.0/24找到目标靶机192.168.41.136 扫描端口,因为是靶机,所以速率直接调了10000 扫出来两个端口22和80,进行详细的扫描 没…...
树莓派,linux换清华源
清华源网址 https://mirrors.tuna.tsinghua.edu.cn/help/raspbian/ 更换软件源 鉴于国内网络环境下载各大镜像,软件包速度慢的问题,需要更换软件源,以防下载慢,且在本教程中,统一更换为清华源。 2.3.1 更换树莓派软…...
公有云迁移研究——AWS DMS
大纲 1 什么是DMS2 DMS的作用3 DMS在迁移的时候都做些什么4 在使用DMS的时候我们需要做些什么5 操作5.1 创建两个数据库终端节点5.2 创建迁移任务 6 可能遇到的问题7 总结 在本地机房或其他云往AWS上做迁移时,往往会遇到数据库迁移的任务。如果数据量不是特别大&…...
一起学docker系列之十七Docker Compose 与手动操作的比较与优势分析
目录 1 前言2 不使用 Docker Compose2.1 启动 MySQL 容器2.2 启动 Redis 容器2.3 启动微服务容器 3 使用 Docker Compose4 使用 Docker Compose 的优势5 结语参考地址 1 前言 在当今容器化应用的开发与部署中,容器编排工具的选择对于简化流程、提高效率至关重要。本…...
IP地址定位不准确的情况研究
在互联网的浩瀚海洋中,每一台连接到网络的设备都被赋予了一个独特的标识符,这就是IP地址。它就像是我们在线身份的一部分,帮助我们与他人进行通信,获取信息,以及享受各种网络服务。然而,由于各种原因&#…...
海兴贴吧/网络seo是什么意思
页面级别的数据传输-Page level data transfer(钉钉)weex to weex 通过URL传参数(携带的数据量有限),通过weex storage moduleweex to h5,h5 to weex 通过URL传参数native to weex 通过alloc weex 容器中的…...
wordpress标志/全面的seo网站优化排名
6、到这里我们就可以打开Win7本地连接属性了,在里边即可更高本地连接IP地址了,如下图所示,我们切换到网络一栏,然后选中“ Internet 协议版本4 ”,然后点击下边的属性,如下图所示1、2、3步骤:7…...
网站开发的硬件设备有/一个完整的策划案范文
文章目录反转链表1.两种解法双指针递归法2.总结算法反转链表 leetcode题目链接 1.两种解法 双指针 def reverseList(head):cur headpre Nonewhile cur ! None:temp cur.next # 保存一下cur的下一个节点,用于更新cur.next pre # 反转# 更新pre、cur指针pre c…...
中企动力网站建设方案/建设优化网站
有些网站图片做了防盗处理,这时可以通过伪造http_referer ,让网站认为是网站内的访问之后把相应的内容保存下来!步骤一:引入dll: /Files/xiachufeng/Interop.MSXML2.rar步骤二: 编写函数 /// <summary>/// 伪造http_refere…...
大连企业制作网站/宁波网站推广运营公司
在注册谷歌账号时验证手机号码可能会出现 - 此电话号码无法用于进行验证 的情况如下图所示: 出现这种情况很容易解决,下面跟着鬼鬼一起做吧(注册Google账户时要全程开着tz,本教程也不例外): 解决方法&…...
上海公司做网站的价格/优化系统的软件
[转] http://www.leiphone.com/news/201704/z87wjT8j9s94tMnG.html 市场上空间定位的技术方案分为单目、双目以及激光雷达三大阵营,其中激光雷达由于成本高昂市场接受度较低,而在都是基于计算机视觉的单目和双目中,双目则显得更受欢迎。在国内…...