华为OD机试 - 仿LISP运算 - 逻辑分析(Java 2023 B卷 200分)

在这里插入图片描述

目录

    • 专栏导读
    • 一、题目描述
    • 二、输入描述
    • 三、输出描述
    • 四、解题思路
    • 五、Java算法源码
    • 六、效果展示
      • 1、输入
      • 2、输出
      • 3、说明

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

专栏导读

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

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

一、题目描述

LISP语言唯一的语法就是括号要配对,形如(OP P1 P2 …),括号内元素由单个空格分割。其中第一个元素OP为操作符,后续元素均为其参数,参数个数取决于操作符类型。

注意:参数P1,P2也有可能是另外一个嵌套的(OP P1 P2…),当前OP类型为add/sub/mul/div(全小写) 分别代表整数的加减乘除法,简单起见,所有OP参数个数均为2。

举例:

输入输出
(mul 3 -7)-21
(add 1 2)3
(sub (mul 2 4) (div 9 3))5

二、输入描述

输入为长度不超过512的字符串,用例保证了无语法错误

三、输出描述

输出计算结果或者“error”。

四、解题思路

  1. 定义数字栈numStack,操作符栈operatorStack;
  2. 遍历输入的字符串input;
    • 如果是(,则操作符入栈;
    • 如果是计算标识符),数字入栈、弹出num2、弹出num1,通过加减乘除标识符计算;
    • 如果是空格,则数字入栈
  3. 输出数字栈最后数值。

五、Java算法源码

public class OdTest {static Stack<Integer> numStack = new Stack<>();   // 数字栈static Stack<String> operatorStack = new Stack<>();  // 操作符栈// add/sub/mul/div// (div 15 (sub 45 40))// (sub (add 10 2) (mul 2 (div 10 2))) 2public static void main(String[] args) {Scanner sc = new Scanner(System.in);String input = sc.nextLine();int index = 0;int num1 = 0;int num2 = 0;for (int i = 0; i < input.length(); i++) {char ch = input.charAt(i);// 操作符if (ch == '(') {// 操作符入栈operatorStack.push(input.substring(i + 1, i + 4));i += 4;index = i + 1;} else if (ch == ')') {// 计算标识符if (index < i) {// 数字入栈numStack.push(Integer.parseInt(input.substring(index, i)));i += 1;index = i + 1;}// 弹出num2num2 = numStack.pop();// 弹出num1num1 = numStack.pop();// 计算calculate(num1, num2);} else {if (ch == ' ') {if (index < i) {// 数字入栈numStack.push(Integer.parseInt(input.substring(index, i)));index = i + 1;}}}}while (operatorStack.size() != 0) {num2 = numStack.pop();num1 = numStack.pop();calculate(num1, num2);}System.out.println(numStack.get(0));}public static void calculate(int num1, int num2) {String op = operatorStack.pop();switch (op) {case "add":// 加numStack.push(num1 + num2);break;case "sub":// 减numStack.push(num1 - num2);break;case "mul":// 乘numStack.push(num1 * num2);break;case "div"://if (num2 == 0) {System.out.println("error");System.exit(0);} else {int res = num1 / num2;if (num1 % num2 != 0) {if (res < 0) {res -= 1;} else {res += 1;}}numStack.push(res);}break;default:System.out.println("error");break;}}
}

六、效果展示

1、输入

(sub (add 10 2) (mul 2 (div 10 2)))

2、输出

2

3、说明

  1. 先计算div 10 2 = 5,表达式变为(sub (add 10 2) (mul 2 5))
  2. 再计算mul 2 5 = 10,表示式变为(sub (add 10 2) 10)
  3. 计算add 10 2 = 12,表示式变为(sub 12 10)
  4. 最后输出表示式(sub 12 10)结果2

在这里插入图片描述


🏆下一篇:华为OD机试 - 最长的顺子 - 感谢@禁止你发言提供的更简便算法(Java 2023 B卷 200分)

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

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

在这里插入图片描述

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

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

相关文章

hql面试题之上海某资深数仓开发工程师面试题-求不连续月份的月平均值

1.题目 A,B两组产品的月平均值&#xff0c;月平均值是当月的前三个月值的一个平均值&#xff0c;注意月份是不连续的&#xff0c;如果当月的前面的月份不存在&#xff0c;则为0。如A组2023-04的月平均值为2023年1月的数据加2023-02月的数据的平均值&#xff0c;因为没有其他月…

股票代码合法验证:python字符串str应用

从键盘输入六位股票代码字符串&#xff0c;判定合法并输出板块分类&#xff0c;否则输出“NO”。 (笔记模板由python脚本于2023年12月04日 19:19:07创建&#xff0c;本篇笔记适合熟悉python字符串和字典的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https:…

MySQL安装,建立,导入本地Txt文件

MySQL安装教程参照如下&#xff1a; Windows下MySQL的安装及初始化设置 - 简书 MySQL修改数据默认存储路径 MySQL修改数据默认存储路径_show global variables like %datadir%-CSDN博客 建立数据库 C:\>mysql -u testsql -p mysql> create database mysqldb; mysq…

Oracle 中换行chr(10)、回车chr(13)

一、前言 chr(n)&#xff1a;返回 ascii 值对应的字符。 ascii(char)&#xff1a;返回字符 char对应的ascii 值。 chr(n) 和 ascii(char) 作用刚好是相反的。 SQL> select chr(65) from dual; 控制台显示&#xff1a;ASQL> select ascii(A) from dual; 控制台显示&am…

API资源对象Deployment;API资源对象Service;API资源对象DaemonSet;API资源对象StatefulSet

API资源对象Deployment&#xff1b;API资源对象Service&#xff1b;API资源对象DaemonSet&#xff1b;API资源对象StatefulSet API资源对象Deployment Deployment YAML示例&#xff1a; vi ng-deploy.yaml apiVersion: apps/v1 kind: Deployment metadata:labels:app: myng…

Spring Cloud + Vue前后端分离-在线课程介绍

第2章 使用Maven搭建SpringCloud项目 第3章 SpringBoot项目技术整合 第4章 使用Vue cli 4搭建管理控台 第5章 单表管理功能前后端开发 第6章 通用代码生成器开发 第7章 核心业务功能开发 第8章 文件上传功能开发 第9章 大文件断点续与极速秒传 第10章 基于阿里云OSS的文…

前端面试题(面试碰到的一些)(一)

1、浏览器的存储方式都有哪些? cookie: 优点——兼容性好&#xff0c;请求头自带cookie方便 。缺点——大小只有4k, 请求头加入 cookie 浪费流量&#xff08;多用于记录登录状态&#xff09; localStorage: 优点—— 操作方便&#xff0c;永久性存储&#xff…

JIRA 重建索引加快速度

JIRA 重建索引加快速度 JIRA数据量大时&#xff0c;做一遍reindex的速度会很慢&#xff0c;经常需要几个小时 这是后需要查看CPU&#xff0c;如果做reindex时候CPU占用率不高&#xff0c;增加 index的线程数以加快 reindex 配置步骤 停止掉JIRA在home目录下的 jira-config.…

漫谈HBuilderX App-Jenkins热更新构建

漫谈Uniapp App热更新包-Jenkins CI/CD打包工具链的搭建 零、写在前面 HBuilderX是DCloud旗下的IDE产品&#xff0c;目前只提供了Windows和Mac版本使用。本项目组在开发阶段经常需要向测试环境提交热更新包&#xff0c;使用Jenkins进行CD是非常有必要的一步。尽管HBuilderX提…

python pyaudio给数据加噪声

python pyaudio给数据加噪声 # -*- coding: utf-8 -*- import argparse import array import math import numpy import numpy as np import random import wavedef get_args():parser argparse.ArgumentParser()parser.add_argument("--clean_file", typestr, req…

cordova详解

从八个方面让你快速了解cordova&#xff08;一&#xff09; - 掘金 从八个方面让你快速了解cordova&#xff08;二&#xff09; - 掘金 Cordova和React-Native两种框架的区别和优劣分析_cordova和react native-CSDN博客 Cordova开发App的优缺点是什么&#xff1f; - 咕噜企业…

开源CDN软件GoEdge —— 筑梦之路

官方网站&#xff1a;GoEdge CDN - 制作自己的CDN - GoEdge CDN | 自建CDN GoEdge是一款管理分布式CDN边缘节点的开源工具软件&#xff0c;目的是让用户轻松地、低成本地创建CDN/WAF等应用。 特性 免费 - 开源、免费、自由、开放 简单 - 架构简单清晰&#xff0c;安装简单&a…

Android,JNI开发和NDK之间的联系

Android&#xff0c;JNI开发和NDK。 1.jni和ndk jni是在jdk中就有出现的 在我们jdk路径中 D:\java\jdk11\include 这就是jdk中的jni Android开发环境中的ndk也有jni&#xff0c; D:\Android\sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\sysroot\usr\in…

DICE模型原理

随着温室气体排放量的增大和温室效应的增强&#xff0c;全球气候变化问题受到日益的关注。我国政府庄严承诺在2030和2060年分别达到“碳达峰”和“碳中和”&#xff0c;因此气候变化和碳排放已经成为科研人员重点关心的问题之一。气候变化问题不仅仅是科学的问题&#xff0c;同…

Django二转Day06

1.多表查询 基于对象 基于双下划线 正向和反向 聚合查询 分组查询&#xff08;配合聚合使用&#xff09; F查询和Q查询 2.其他字段和字段参数 其他字段 字段参数&#xff1b;ORM参数 ForeignKey 属性 ManyToManyField 用于表示多对多的关联关系。在数据库中通过第三…

解决msvcp140.dll丢失问题的5种方法,验证有效

在计算机编程和软件开发中&#xff0c;我们经常会遇到一些陌生的DLL文件&#xff0c;比如msvcp140.dll。这些DLL文件是动态链接库&#xff08;Dynamic Link Libraries&#xff09;的缩写&#xff0c;它们包含了可以被多个程序共享的代码和数据。那么&#xff0c;msvcp140.dll是…

优思学院|六西格玛中的过程管理思维

过程是什么&#xff1f; 过程&#xff08;Process&#xff09;是一系列相互关联的活动&#xff0c;将输入转化为输出&#xff0c;我们习惯于用 X 来表示输入&#xff0c;用 Y 来表示输出&#xff0c;就如下图一样。在产品&#xff08;服务&#xff09;质量形成过程中&#xff…

【ArcGIS Pro微课1000例】0048:深度学习--人群计数

文章目录 一、小学回忆录二、深度学习计算人头数三、案例实现一、小学回忆录 加载配套实验数据包中的图片及训练模型。你还记得当年的小学毕业班有多少同学吗?今天我们就用ArcGIS提供的人工智能工具,重温一下童年记忆。 二、深度学习计算人头数 本案例使用到的是深度学习中…

pyinstaller打包pyside

准备软件 准备一个python代码展示pyside的gui 安装PyInstaller 首先检查本机有没有安装PyInstaller &#xff0c;如果没有安装的话&#xff0c;需要运行 pip3 install PyInstaller 打包windowed界面 pyinstaller -w pymain.py 问题 Could not find the Qt platform plugi…

UNDERSTANDING AND IMPROVING INFORMATION TRANSFER IN MULTI-TASK LEARNING

Z i _i i​ X i R i X_iR_i Xi​Ri​&#xff0c; X X X是Task embedding layers&#xff0c; R R R是Alignment matrices 辅助信息 作者未提供代码