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

news2024/11/24 19:24:47

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、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表示英文模式,默认true
        boolean 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.coloradmin.cn/o/1288953.html

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

相关文章

固定Microsoft Edge浏览器的位置设置,避免自动回调至中国

问题描述 在使用Copilot等功能时&#xff0c;需要将Microsoft Edge浏览器的位置设置为国外。但每次重新打开浏览器后&#xff0c;位置设置又自动回调至中国&#xff0c;导致每次均需要手动调整。 原因分析 这个问题的出现是因为每次启动Microsoft Edge时&#xff0c;默认打开…

【开源】基于Vue+SpringBoot的网上药店系统

项目编号&#xff1a; S 062 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S062&#xff0c;文末获取源码。} 项目编号&#xff1a;S062&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 药品类型模块2.3 药…

6 大 Android 照片恢复软件深度评测

当您发现令人难忘的照片在 Android 上被错误删除或丢失时&#xff0c;您可能会感到非常沮丧。然而&#xff0c;当您尝试安装一些恢复应用程序并希望将它们重新恢复时&#xff0c;其中许多应用程序无法再次检测到丢失的照片。 为了节省您逐一尝试此类应用程序的时间&#xff0c…

【华为OD题库-076】执行时长/GPU算力-Java

题目 为了充分发挥GPU算力&#xff0c;需要尽可能多的将任务交给GPU执行&#xff0c;现在有一个任务数组&#xff0c;数组元素表示在这1秒内新增的任务个数且每秒都有新增任务。 假设GPU最多一次执行n个任务&#xff0c;一次执行耗时1秒&#xff0c;在保证GPU不空闲情况下&…

对标Gen-2!Meta发布新模型进军文生视频赛道

随着扩散模型的飞速发展&#xff0c;诞生了Midjourney、DALLE 3、Stable Difusion等一大批出色的文生图模型。但在文生视频领域却进步缓慢&#xff0c;因为文生视频多数采用逐帧生成的方式,这类自回归方法运算效率低下、成本高。 即便使用先生成关键帧,再生成中间帧新方法。如…

分类信息发布小程序效果如何

信息发布系统连接信息供需双方&#xff0c;打造信息聚合平台&#xff0c;用户可获取和发布需求信息、参与互动交流&#xff0c;适用于同城、社区交流、客户互动、业务员/经纪人发布信息场景。 制作分类信息小程序后&#xff0c;商家后台设置信息项&#xff0c;发布者填写内容发…

java 产品定制服务系统myeclipse开发sqlserver数据库BS模式java编程

一、源码特点 java 产品定制服务系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;比较流行的ssh框架系统具有完整的源代码和数据库&#xff0c;myeclipse开发系统主要采用B/S模式开发 。 javaWeb产品定制服务系统1 二、功能介绍 前台功…

好用的音乐制作工具 Studio One 6中文 for mac

Studio One 6是一款专业的音乐制作软件&#xff0c;提供了全面而强大的功能&#xff0c;帮助音乐制作人、录音工程师和创作者实现他们的创意。 它的主要特点包括&#xff1a;直观的用户界面&#xff0c;使得操作变得简单易懂&#xff1b;支持多轨录音&#xff0c;允许用户进行…

Altair推出 Altair RapidMiner 2023 平台,提供生成式 AI 功能

Altair推出 Altair RapidMiner 2023 平台&#xff0c;提供生成式 AI 功能 更新包括自动聚类、扩展 SAS、Python 和 R 编程功能等 近日&#xff0c;Altair&#xff08;纳斯达克股票代码&#xff1a;ALTR&#xff09;近日宣布其数据分析和 AI 平台 Altair RapidMiner 取得了一系…

深度学习 -- 神经网络

1、神经网络的历史 2、 M-P模型 M-P模型是首个通过模仿神经元而形成的模型。在M-P模型中,多个输入节点对应一个输出节点y。每个输入x,乘以相应的连接权重w,然后相加得到输出y。结果之和如果大于阈值h,则输出1,否则输出0。输入和输出均是0或1。 公式2.1&#xff1a; …

基于ssm+jsp的精品酒销售管理系统论文

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff1b;对于精品酒销售管理系统当然也不能排除在外&#xff0c;随着网络技术的不断成熟&#xff0c;带动了精品酒销售管理系统&#xff0c;它彻底改变…

MyBatisPlus+SpringBoot+JavaFX连接查询

前言 一般使用SprootBoot是使用SprootBootTest和Junit配合&#xff0c;但如果不是写测试类&#xff0c;怎么与javafx配合使用&#xff1f;笔者不知道&#xff0c;经过多次搜索以及问了各种AI&#xff0c;最后误打误撞&#xff0c;终于想通了&#xff0c;其实很简单。 用了许久…

碳信用市场的未来:中碳CCNG的愿景

在全球碳减排努力日益增强的背景下&#xff0c;中国碳中和发展集团有限公司&#xff08;简称中碳CCNG&#xff09;正以其创新的碳交易平台引领行业新趋势。中碳CCNG提供的一站式综合服务不仅包括碳信用的托管、买卖和抵消&#xff0c;而且通过其综合性数字平台&#xff0c;促进…

【CodeTop】TOP 100 刷题 31-40

文章目录 31. 二叉树中的最大路径和题目描述代码与解题思路 32. 合并区间题目描述代码与解题思路 33. 编辑距离题目描述代码与解题思路 34. 二叉树的中序遍历题目描述代码与解题思路 35. 最长公共子序列题目描述代码与解题思路 36. 二分查找题目描述代码与解题思路 37. 二叉树的…

STM32F407-14.3.13-01发生外部事件时清除 OCxREF 信号

发生外部事件时清除 OCxREF 信号 对于给定通道&#xff0c;在 ETRF⑧ 输入施加高电平&#xff08;相应 TIMx_CCMRx 寄存器中的 OCxCE⑦ 使能位置“1”&#xff09;&#xff0c;可使 OCxREF⑨ 信号变为低电平。OCxREF⑨ 信号将保持低电平&#xff0c;直到发生下一更新事件 (UEV)…

SAM+使用SAM应用数据集完成分割

什么是SAM&#xff1f; SAM(Segment Anything Model&#xff09;是由 Meta 的研究人员团队创建和训练的深度学习模型。在 Segment everything 研究论文中&#xff0c;SAM 被称为“基础模型”。 基础模型是在大量数据上训练的机器学习模型&#xff08;通常通过自监督或半监督学习…

农业杀虫剂市场分析:我国实现销售收入319.3亿元

农业杀虫剂&#xff0c;指的是农业用的杀虫化学制剂。主要用于防治农业害虫和城市卫生害虫的药品&#xff0c;使用历史长远、用量大、品种多。 按毒理作用可分为&#xff1a;①神经毒剂。作用于害虫的神经系统&#xff0c;如滴滴涕、对硫磷、呋喃丹、除虫菊酯等。②呼吸毒剂。抑…

ssm党务政务服务热线平台源码和论文答辩PPT

摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计…

易点易动设备管理系统--提升设备能耗管理效率的工具

在当今的节能环保意识日益增强的社会背景下&#xff0c;设备能耗管理成为了市场推广人员关注的焦点之一。为了帮助市场推广人员提升设备能耗管理效率&#xff0c;易点易动设备管理系统应运而生。本文将详细介绍易点易动设备管理系统的功能和优势&#xff0c;以及如何借助该系统…

class050 双指针技巧与相关题目【算法】

class050 双指针技巧与相关题目【算法】 算法讲解050【必备】双指针技巧与相关题目 code1 922. 按奇偶排序数组 II // 按奇偶排序数组II // 给定一个非负整数数组 nums。nums 中一半整数是奇数 &#xff0c;一半整数是偶数 // 对数组进行排序&#xff0c;以便当 nums[i] 为…