华为OD机试 - 火星文计算2(Java 2024 D卷 100分)

news2024/11/24 15:08:56

在这里插入图片描述

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

专栏导读

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

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

一、题目描述

已知火星人使用的运算符号为 # 、$

他们与地球人的等价公式如下:

  • x#y = 4x+3y+2
  • x$y = 2*x+y+3

其中 x y 是无符号整数

地球人公式按照 C 语言规则进行计算

火星人公式中 # 符优先级高于 $

相同的运算符按从左到右的顺序运算

二、输入描述

火星人字符串表达式结尾不带回车换行。

输入的字符串说明:

字符串为仅有无符号整数和操作符组成的计算表达式

  1. 用例保证字符串中操作数与操作符之间没有任何分隔符
  2. 用例保证操作数取值范围为 32 位无符号整数
  3. 保证输入以及计算结果不会出现整型溢出
  4. 保证输入的字符串为合法的求值报文 例如: 123#4$5#76$78
  5. 保证不会出现非法的求值报文

例如:

  • #4$5 这种缺少操作数;
  • 4$5# 这种缺少操作数;
  • 4#$5 这种缺少操作数;
  • 4 $5 有空格;
  • 3+4-5*6/7 有其他操作符;
  • 12345678987654321$54321 32 位整数溢出

三、输出描述

根据火星人字符串输出计算结果,结尾不带回车换行

1、输入

7#6$5#12

2、输出

157

3、说明

7#6$5#12=(47+36+2)$5#12
=48KaTeX parse error: Expected 'EOF', got '#' at position 2: 5#̲12 =48(45+312+2)
=48$58
=2*48+58+3
=157

四、解题思路

为了求解火星人的运算表达式,我们需要解析并按优先级进行计算。具体步骤如下:

  1. 解析表达式:
    • 使用两个栈,一个用于存储操作数,另一个用于存储操作符。
    • 遇到操作数时,直接压入操作数栈。
    • 遇到操作符时,依据操作符的优先级进行计算。
  2. 计算优先级:
    • 定义 # 优先级高于 $。
    • 遇到操作符时,如果当前操作符的优先级高于栈顶操作符,则压入操作符栈。
    • 如果当前操作符优先级不高于栈顶操作符,则先进行栈顶操作符的计算,然后将当前操作符压入栈。
  3. 计算过程:
    • 遇到操作符时,从操作数栈中弹出两个操作数进行计算,将结果压入操作数栈。
    • 在遍历完整个表达式后,依次计算剩余的操作符,直到栈为空。

五、Java算法源码

public class Test01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        // 读取火星人运算表达式
        String expression = scanner.nextLine();
        scanner.close();
        // 计算并输出表达式的结果
        System.out.print(evaluateExpression(expression));
    }

    public static long evaluateExpression(String expression) {
        Stack<Long> nums = new Stack<>(); // 用于存储操作数
        Stack<Character> ops = new Stack<>(); // 用于存储操作符
        int len = expression.length();

        for (int i = 0; i < len;) {
            if (Character.isDigit(expression.charAt(i))) {
                // 解析操作数
                long num = 0;
                while (i < len && Character.isDigit(expression.charAt(i))) {
                    num = num * 10 + expression.charAt(i) - '0';
                    i++;
                }
                nums.push(num); // 将操作数压入栈中
            } else {
                // 解析操作符
                while (!ops.isEmpty() && precedence(ops.peek()) >= precedence(expression.charAt(i))) {
                    // 如果栈顶操作符优先级大于等于当前操作符,进行计算
                    long num2 = nums.pop(); // 弹出第二个操作数
                    long num1 = nums.pop(); // 弹出第一个操作数
                    char op = ops.pop(); // 弹出操作符
                    nums.push(applyOp(num1, num2, op)); // 计算并将结果压入操作数栈中
                }
                ops.push(expression.charAt(i)); // 将当前操作符压入操作符栈
                i++;
            }
        }

        // 处理剩余的操作符
        while (!ops.isEmpty()) {
            long num2 = nums.pop(); // 弹出第二个操作数
            long num1 = nums.pop(); // 弹出第一个操作数
            char op = ops.pop(); // 弹出操作符
            nums.push(applyOp(num1, num2, op)); // 计算并将结果压入操作数栈中
        }

        return nums.pop(); // 返回最终结果
    }

    // 返回操作符的优先级
    private static int precedence(char op) {
        if (op == '#') return 2; // '#' 优先级为2
        if (op == '$') return 1; // '$' 优先级为1
        return 0;
    }

    // 根据操作符对操作数进行计算
    private static long applyOp(long num1, long num2, char op) {
        if (op == '#') {
            return 4 * num1 + 3 * num2 + 2;
        } else if (op == '$') {
            return 2 * num1 + num2 + 3;
        }
        return 0;
    }
}

六、效果展示

1、输入

7#6$5#12

2、输出

157

3、说明

在这里插入图片描述


🏆下一篇:华为OD机试 - 简易内存池 - 逻辑分析(Java 2024 C卷 200分)

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

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

在这里插入图片描述

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

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

相关文章

stm32学习-软件I2C读取MPU6050

接线 SDAPB11SCLPB10 I2C 对操作端口的库函数进行封装 void MyI2C_W_SCL(uint8_t BitValue)//写 {GPIO_WriteBit(GPIOB, GPIO_Pin_10, (BitAction)BitValue);Delay_us(10); }void MyI2C_W_SDA(uint8_t BitValue)//写 {GPIO_WriteBit(GPIOB, GPIO_Pin_11, (BitAction)BitValu…

LeetCode 1789, 6, 138

目录 1789. 员工的直属部门题目链接表要求知识点思路代码 6. Z 字形变换题目链接标签思路代码 138. 随机链表的复制题目链接标签思路代码 1789. 员工的直属部门 题目链接 1789. 员工的直属部门 表 表Employee的字段为employee_id&#xff0c;department_id和primary_flag。…

graalvm编译springboot3 native应用

云原生时代容器先行&#xff0c;为了更好的拥抱云原生&#xff0c;spring boot3之后&#xff0c;推出了graalvm编译boot项目&#xff0c;利用jvm的AOT&#xff08; Ahead Of Time &#xff09;运行前编译技术&#xff0c;可以将java源码直接构建成机器码二进制的文件&#xff0…

28. 空间滤波器

导论&#xff1a; 几何光线追迹是光线传播的一种不完善描述。严格地说&#xff0c;光束传播是一个相干过程。当波前通过自由空间或光学介质时&#xff0c;波前会发生相干干涉。这种相干传播的建模包括物理光学领域。 物理光学传播&#xff08;POP&#xff09;是zemax的一项强…

基于 Thingsboard 定制开发,国产化企业级、低代码 AIoT 物联网平台

项目源码&#xff0c;文末联系小编 01 ThingsKit 物联网平台 ThingsKit 是基于 Thingsboard 开源物联网平台二次开发&#xff0c;面向中小型企业开箱即用的低代码物联网平台&#xff0c;提供N1N&#xff08;N个终端产品1个物联网平台N个行业方案&#xff09;的产品服务矩阵&…

MySQL数据库入门

1、MySQL概述 MySQL官方网站 https://www.mysql.com/downloads/ MySQL被Oracle公司收购了&#xff0c;作者又重新编写了一个开源的数据库管理系统&#xff0c;Mariadb 2、MySQL产品&版本 2、数据库在网站架构中的角色 LAMP LNMP网站架构 3、安装MySQL-基于yum 查…

现代体育场馆的新宠:气膜体育馆的特点与优势—轻空间

气膜体育馆作为一种新型的运动场馆&#xff0c;近年来在国内外迅速普及&#xff0c;成为现代综合性体育场馆的代表。其独特的结构设计和多功能应用&#xff0c;不仅满足了人们日益增长的健身需求&#xff0c;也为各类体育项目提供了理想的场地。本文将探讨气膜体育馆的特点、优…

GPT-4o的视觉识别能力,将绕过所有登陆的图形验证码

知识星球&#x1f517;除了包含技术干货&#xff1a;《Java代码审计》《Web安全》《应急响应》《护网资料库》《网安面试指南》还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 我们来看一下市面上常见的图形验证…

Node.js中基于node-schedule实现定时任务之详解

文章目录 一、定时任务二、node-schedule、1、安装2、引入3、基于Cron表达式的规则4、基于Date的规则5、基于RecurrenceRule的规则6、API7、状态监听 一、定时任务 实际工作中&#xff0c;可能会遇到定时清除某个文件夹内容&#xff0c;定时发送消息或发送邮件给指定用户&…

与Citrix桌面的共存期,如何保障一致体验?

在用户实际的应用场景中&#xff0c;从Citrix到深信服桌面云的替换并不是一蹴而就的过程。特别是对于已经投资购买Citrix桌面云的用户来说&#xff0c;如何最大限度地利用现有设备&#xff0c;实现成本效益最大化&#xff0c;是他们面临的一个重要问题。 为了应对这一需求&…

智慧工厂监控可视化解决方案(160页WORD)

方案介绍&#xff1a; 本智慧工厂监控可视化解决方案通过集成先进的物联网和大数据技术&#xff0c;为制造业企业提供了全面的数字化转型支持。通过实时监控、数据分析、可视化展示等功能&#xff0c;帮助企业提升生产效率、降低运营成本、优化产品质量和能源利用率&#xff0…

高考志愿填报,理科生如何分析选专业?

理科生选择专业的范围更大一些&#xff0c;相比文科说理工科的院校也更多&#xff0c;如何选择适合自己的专业&#xff0c;这是一个比较重要的课题&#xff0c;毕竟大学专业直接关系到职业&#xff0c;是一辈子的大事。 那么理科究竟如何选择专业呢&#xff1f;需要从什么地方…

【单片机毕业设计选题24013】-基于STM32的城市垃圾分类引导系统

系统功能: 1、系统具有语音识别功能&#xff0c;可以对厨余垃圾、其他垃圾、有害垃圾、可回收垃圾进行语音识别&#xff1b; 2、系统可根据语音识别结果直接开启对应类别的垃圾桶&#xff0c;引导分类投放&#xff1b; 3、系统具有语音播报功能&#xff0c;可以语音播报出识…

备忘录怎么插入文件和附件 备忘录插入文件附件方法

在繁忙的工作与生活中&#xff0c;我们时常需要记录各种信息&#xff0c;而备忘录则成为了我们不可或缺的得力助手。然而&#xff0c;当备忘录中需要包含的文件或附件越来越多时&#xff0c;如何高效、便捷地管理这些文件&#xff0c;便成为了一个亟待解决的问题。 想象一下&a…

STM32学习笔记(八)--DMA直接存储器存取详解

&#xff08;1&#xff09;配置步骤1.配置RCC外设时钟 开启DMA外设2.初始化DMA外设 调用DMA_Init 外设存储器站点的起始地址 数据宽度 地址是否自增 方向 传输计数器 是否需要自动重装 选择触发源 通道优先级3.开启DMA控制 4.开启触发信号输出&#xff08;如果需要硬件触发&…

点云格网过程可视化(C++ PCL)

1、背景介绍 在以往的博客中&#xff0c;介绍过利用格网统计平面点云面积&#xff08;具体参考博客&#xff1a;详解基于格网法统计平面点云面积_点云格网法计算xy投影面积-CSDN博客&#xff09;&#xff0c;其实点云格网化可以做其他内容&#xff0c;如边缘检测、格网关系拓扑…

「51媒体」食品展览展会活动,媒体邀约资源有哪些?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 食品展览展会活动在媒体邀约方面拥有丰富的资源&#xff0c;可以吸引各类媒体的关注和报道。以下是一些常见的媒体邀约资源&#xff1a; 1. 行业媒体&#xff1a; 专业食品杂志&#xff…

黑马苍穹外卖2 员工的增查改+异常处理+ThreadLocal

员工管理 新增员工 Controller&#xff1a; PostMapping//post类型的请求ApiOperation("添加员工")public Result save(RequestBody EmployeeDTO employeeDTO) {log.info("新增员工{}", employeeDTO);employeeService.save(employeeDTO);return Result.su…

ASN.1语言详解(编码规则、关键字、符号、数据类型)

目录 一. ASN.1基本信息 ▐ ASN.1编码规则 二. ASN.1语法规范 ▐ ASN.1的关键字 ▐ ASN.1的符号 ▐ ASN.1的数据类型 ▐ 示例 一. ASN.1基本信息 ASN.1&#xff08;Abstract Syntax Notation One&#xff09;是一种国际标准&#xff08;由ITU-T X.680系列建议定义&#…

elasticsearch hanlp插件远程词典配置

elasticsearch hanlp插件远程词典配置 背景远程词典配置新增远程词典文件修改hanlp-remote.xml自动加载词典 远程词典测试 背景 在使用elasticsearch的过程中&#xff0c;总会遇到与分词相关的需求&#xff0c;这里将针对常用的elasticsearch hanlp&#xff08;后面统称为 es …