首页 > 编程语言 >2024年华为OD机试真题-符号运算-(C++/Java/python)-OD统一考试(C卷D卷)

2024年华为OD机试真题-符号运算-(C++/Java/python)-OD统一考试(C卷D卷)

时间:2024-07-16 23:28:11浏览次数:12  
标签:Java 符号 真题 OD 栈顶 num stack 输入 op

  2024华为OD机试真题目录-(B卷C卷D卷)-【C++ Java Python】    

题目描述

给定一个表达式,求其分数计算结果。

表达式的限制如下:

  • 所有的输入数字皆为正整数(包括0)
  • 仅支持四则运算(+-*,/)和括号
  • 结果为整数或分数,分数必须化为最简格式(比如6,3/4,7/8,90/7)
  • 除数可能为0,如果遇到这种情况,直接输出"ERROR"
  • 输入和最终计算结果中的数字都不会超出整型范围
  • 用例输入一定合法,不会出现括号匹配的情况

输入描述

字符串格式的表达式,仅支持+-*,/,数字可能超过两位,可能带有空格,没有负数

长度小于200个字符

输出描述

表达式结果,以最简格式表达

  • 如果结果为整数,那么直接输出整数
  • 如果结果为负数,那么分子分母不可再约分,可以为假分数,不可表达为带分数
  • 结果可能是负数,符号放在前面

用例1

输入

1 + 5 * 7 / 8

输出

43/8

说明

用例2

输入

1 / (0 - 5)

输出

-1/5

说明

符号需要提到最前面

用例3

输入

1 * (3*4/(8-(7+0)))

输出

12

说明

注意括号可以多重嵌套

解题思路


关于符号运算的题目,需要用到两个栈,一个栈用来存符号op_stack,另一个栈用来存数值num_stack;

解题过程是,遍历算式的每一个字符,如果是字符为数字,则暂时存入一个缓存数字

的栈str_stack,防止整数是多位的情况。

如果遍历到字符为+-*/,需要进行两个操作:

1.将str_stack中的字符拿出,组成整数,存入num_stack;

2.比较当前符号和op_stack栈顶符号的优先级,如果op_stack不为空,且op_stack栈顶符号优先级>=当前符号,则先令栈顶符号出栈,再从num_stack中出栈两个数,与栈顶符号计算出结果后,放入num_stack中。否则,将操作符入栈。

如果遍历到(时,直接将符号放入op_stack栈中,之后遇到除)之外的字符,和前面的操作步骤一样,当遇到)时,要将op_stack栈中的符号出栈,进行计算,直至遇到(时结束,将(出栈;

本题存在分数,需要将分数定义为结构体&

标签:Java,符号,真题,OD,栈顶,num,stack,输入,op
From: https://blog.csdn.net/dijkstra2023/article/details/140452853

相关文章

  • LeetCode第257题:二叉树的所有路径的Java实现
    摘要LeetCode第257题要求生成二叉树的所有从根节点到叶子节点的路径。本文将介绍两种Java解决方案:迭代法和递归法。1.问题描述给定一个二叉树的根节点,按照从根到叶的顺序遍历所有路径,并将它们作为列表的列表返回。2.示例分析输入:[1,2,3,null,null,4]'输出:[[1,2],[1,......
  • Java SE 多态
    1.多态的定义多态是Java面向对象的三大特性之一,它允许不同类型的对象对同一方法进行不同的实现。具体来说就是去完成某个行为,不同的对象去完成时会产生出不同的状态。比如,狗和猫都是动物,但完成吃饭这个动作时,会有吃狗粮和吃猫粮这两种状态。publicclassAnimal{p......
  • java的基础
    Java的概述开元、共享、社区庞大的计算机语言java之父詹姆斯·高斯林java技术体系javaSEjavaEEjavaMEjava特性可移植、跨平台、强类型语言、安全java的应用领域网站以及后台手机领域金融项目物流系统桌面开发物联网项目服务器企业级开发大数据科学技术安卓......
  • 【Java--数据结构】二叉树
    欢迎关注个人主页:逸狼创造不易,可以点点赞吗~如有错误,欢迎指出~树结构树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合注意:树形结构中,子树之间不能有交集,否则就不是树形结构常见概念  节点的度:一个节点含有子树的个数,如A的度为6......
  • 来培训遇到的问题,vscode 解答汇总
    QuestionSignleton&s1=Signleton::getInstance();AnswerQuestionSignleton&s1=Signleton::getInstance();Answer看起来你想要创建一个单例模式的实例。在这里,"Singleton"看起来是一个单例模式的类,而"getInstance()"是获取该类实例的方法。通常情况下,单例模式通过私......
  • [ABC258Ex] Odd Steps 题解
    思路拿到这道题,第一时间肯定想到是\(dp\)题目。朴素DP用\(dp_i\)表示序列和为\(i\)的序列个数。因为原数组由奇数组成,所以\(dp\)只可能由\(dp_{i-1}\),\(dp_{i-3}\)等等转移过来,若\(i\inA\),\(dp_i=0\)。即:\[dp_i=\begin{cases}0&i\inA\\dp_{i-1}+dp_{i-3}+\c......
  • 前端面试必修--面试算法题(附带字节跳动真题pdf)
    面试算法题目录简单53.最大子数组和-力扣(LeetCode)415.字符串相加-力扣(LeetCode)206.反转链表-力扣(LeetCode)1.两数之和-力扣(LeetCode)572.另一棵树的子树-力扣(LeetCode)1410.HTML实体解析器-力扣(LeetCode)69.x的平方根-力扣(LeetCode)26.删除有序数组中......
  • 7月16日JavaSE学习笔记
    方法(函数、过程)语法返回值类型方法名(参数列表){方法体}返回值类型:该方法必须返回的一个这个类型的对象当方法不需要返回值时,返回值类型就定义为voidpublicstaticintmax(inta,intb){intmax=a>b?a:b;//方法名和变量名不会冲突//return返回......
  • java入门---作用域
    作用域:作用域是指在程序中定义变量的区域,该变量在该区域内可被访问。1、关于作用域的两种查询在JavaScript中编译器会用两种查询方式进行查询一种是LHS查询;一种是RHS查询;俩个查询的含义是,当变量出现赋值操作在左侧时进行LHS查询,出现在右侧时进行RHS查询。详细的讲就是R......
  • 花几千上万学习Java,真没必要!(九)
    while循环:测试代码1:packagetestwhile.com;publicclassTestWhile{publicstaticvoidmain(String[]args){inti=0;while(i<5){System.out.println("当前循环次数:"+i);i++;}}}测试代码2......