文字加减前后缀lisp_华为笔试题---仿LISP算法

2023-11-06

直接上代码,水平有限,欢迎小伙伴们指正(暂不知效率如何)

import java.util.Scanner;

import java.util.Stack;

/**

* 仿LISP字符串运算

* LISP语言唯一的语法就是括号要配对。

* 形如 (OP P1 P2 …),括号内元素由单个空格分割。

* 其中第一个元素OP为操作符,后续元素均为其参数,参数个数取决于操作符类型

* 注意:参数 P1, P2 也有可能是另外一个嵌套的 (OP P1 P2 …)

* 当前OP类型为add/sub/mul/div(全小写),分别代表整数的加减乘除法。

* 四种类型的参数个数均为2个

* 举例

* -输入:(mul 3 -7)输出:-21

* 输入:(add 1 2) 输出:3

* 输入:(sub (mul 2 4) (div 9 3)) 输出 :5

* 输入:(div 1 0) 输出:error

*/

public class Main {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

String input = scanner.nextLine();

// 存放操作符的栈

Stack opStack = new Stack<>();

// 存放计算结果的栈

Stack dataStack = new Stack<>();

try {

exec(input, opStack, dataStack);

} catch (Exception e) {

System.out.println("error");

}

}

/*

1、从头开始遍历字符,遇到左括号,就将其后边的三个操作符压入操作符栈中

2、遇到数字,就将其压入数据栈中(考虑连续数字和负数)

3、遇到右括号,就从操作符栈中出栈最近的操作符

4、然后在数据栈中出栈两个数字

5、通过第3步的操作符和第4步的两个数字进行计算

6、将第5步的计算结果压入数据栈中

7、重复执行上述1~6,直到操作符栈为空,输出数据栈的结果即可

*/

public static void exec(String input, Stack opStack, Stack dataStack) {

int length = input.length();

for (int i = 0; i < length; ) {

char c = input.charAt(i);

// 如果是空格,跳过当前循环

if (c == ' ') {

i++;

continue;

}

if (c == '(') {

// 操作符入栈

opStack.push(input.substring(i + 1, i + 4));

// 修改循环下标并跳过当前循环

i = i + 4;

continue;

}

// 如果是数字,连续读取,并压入数据栈

if (c == '-' || Character.isDigit(c)) {

int j = i;

while (Character.isDigit(input.charAt(j + 1))) {

j++;

}

dataStack.push(Integer.valueOf(input.substring(i, j + 1)));

i = j + 1;

continue;

}

if (c == ')') {

// 取出操作符和数据,并将计算结果压入数据栈中

String op = opStack.pop();

Integer p2 = dataStack.pop();

Integer p1 = dataStack.pop();

Integer result = calculate(op, p1, p2);

dataStack.push(result);

i++;

}

}

if (opStack.empty()) {

// 如果操作符栈为空,则输出数据栈结果

System.out.println(dataStack.pop());

} else {

throw new RuntimeException();

}

}

public static Integer calculate(String op, Integer p1, Integer p2) {

switch (op) {

case "add":

return p1 + p2;

case "sub":

return p1 - p2;

case "mul":

return p1 * p2;

case "div":

return p1 / p2;

default:

throw new RuntimeException();

}

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文字加减前后缀lisp_华为笔试题---仿LISP算法 的相关文章

  • 热红外和可见光数据集的具有模态不变特征表示的跨模态图像匹配网络

    Cross Modality Image Matching Network With Modality Invariant Feature Representation for Airborne Ground Thermal Infrare
  • 使用Ajax异步加载网页——一文入门JQuery的Ajax

    Ajax Ajax Asynchronous Javascript And XML 百度百科写道 异步JavaScript和XML 是指一种创建交互式 快速动态网页应用的网页开发技术 无需重新加载整个网页的情况下 能够更新部分网页的内容 重
  • Unity Shader入门精要第七章 基础纹理 凹凸映射

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 实践 参考 前言 纹理的另一种常见的应用就是凹凸映射 bump mapping 凹凸映射的目的是使用一张纹理 来修改模型表面的法线 以便为模型提供更多的细节 这种方法不会真
  • 发电机励磁装置LabVIEW 和MATLAB/Simulink联合仿真

    一 主要内容 实现发电机励磁装置的独立运行 测试学习及动态参数优化 开发一款发电机励磁装置虚拟仿真系统 为便于和励磁装置进行控制器域网 Controller Area Network 简称 CAN 通讯并实现友好的人机界面 主程序基于Lab
  • 希沃展台如何使用_电子白板基本操作及展台使用教程

    电子白板基本操作及展台使用教程 一 一体机使用注意事项 1 红外边框 1 注意边框尤其是底边容易有粉笔末等灰尘 阻碍红外线的发射与接收 影响定位造成失误或失效 2 注意手 衣服与边框间的距离 以免产生误操作 2 电视机菜单使用及误操作处理
  • C # 学习笔记十

    引言 委托 和 事件在 Net Framework中的应用非常广泛 然而 较好地理解委托和事件对很多接触C 时间不长的人来说并不容易 它们就像是一道槛儿 过了这个槛的人 觉得真是太容易了 而没有过去的人每次见到委托和事件就觉得心里别 bi
  • github代码push

    情景 今天准备往github提交代码 但是发现一直443 解决方法 首先 科学上网 然后终端输入 git config global http https github com proxy socks5 127 0 0 1 7890 完事
  • 网络系列--计算机系统与人工智能之我见

    文章目录 计算机系统与人工智能之我见 for AI 硬件 XPU的发展 软件 AI编程框架 by AI AIOps 传统产业 AI 总结 参考文献 人工智能 AI 是当前的发展热点 从计算机系统的角度看 有两个角度 一是for AI 即何优
  • Google Chrome右上角搜索标签页(倒三角图标) 禁用方法

    无意间发现这个图标 以为是安装了流氓插件 没想到是浏览器自带的实验性功能 禁用方法 地址栏输入 chrome flags 搜索栏输入 Tab Search 把Default改为Disabled 重启浏览器即可 2021 6 6更新 突然又发
  • IDEA和VS code设置默认换行符为LF

    相信用Git的人对这个问题非常了解了 如果团队没做好约定 或者新人不太会用git 用的又是windows git又没有开启autocrlf 那么当队友修改了代码提交之后 那画面真的是不忍直视 所以索性将IDE的默认换行符设置为LF 一劳永逸
  • tf好朋友之matplotlib的使用——secondary axis次坐标轴的使用

    tf好朋友之matplotlib的使用 secondary axis次坐标轴的使用 次坐标轴显示的常用函数 plt subplots ax1 twinx 应用示例 坐标轴可以不止一边噢 除了左边还可以有右边 次坐标轴显示的常用函数 plt
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 2023浙江省赛“信息安全管理与评估“--数字取证调查--网络数据包分析解析(高职组)

    2022全国职业技能大赛 信息安全管理与评估 高职组 任务书 2022全国职业技能大赛 信息安全管理与评估 任务书 第一阶段竞赛项目试题 第二阶段竞赛项目试题 任务 2 网络数据包分析 第三阶段竞赛项目试题 2022全国职业技能大赛 信息安
  • iar 堆栈设置_Heap堆的理解以及在IAR中如何设置堆的大小

    堆栈的概念在脑海里已经存在有一段时间了 今天就测试来整理下Heap堆 栈以后再说 堆区不像全局变量和局部变量总是有指定的内存大小 它是为了在程序运行时动态分配内存而设定的一块区域 在程序运行时需要一块特定大小的内存空间来使用的时候 那么可以
  • spring获取DataSource数据源从Tomcat中配置的数据源获取方法--jndi方式

    1 配置目的 公司数据库提供内网与外网访问数据库 在家与公司都可以访问 这就需要分情况配置数据源信息 公司项目统一在tomcat中配置数据源信息 不同环境只需要更改tomcat数据源配置信息 不需要对项目配置信息进行修改 方便灵活 2 对于
  • uniapp 中使用 vue vite

    import defineConfig from vite import uni from dcloudio vite plugin uni export default defineConfig plugins uni server po
  • python requirements.txt的生成与使用

    项目开发过程中难免少不了三方库的各种安装 python对这个场景做了一个特别的三方包安装list 一般都叫做requirements txt 如果项目中使用了 virtualenv 环境 直接通过pip freeze 就可以解决 如果没有的
  • 测试开发必备10大技能,你达标了吗?

    一个人到底要走多少弯路 才能成为一名合格的测试开发工程师 近年来 随着敏捷开发 微服务架构 DevOps逐渐深入人心 软件行业发生了翻天覆地的变化 相应地 软件测试行业也洗牌加剧 软件测试的准入门槛 也从以前的是个人就行 逐渐变成了 科班出
  • 升级OpenSSH

    升级OpenSSH 安装工具包 yum install y gcc gcc c openssl devel zlib devel zlib dev openssl devel pam devel 备份旧的ssh文件 mkdir p back

随机推荐

  • 多进程IterableDataset流式读取数据的坑:每个进程会读取一遍完整数据

    构建流式读取DataLoader的方法可以参考 pytorch构造可迭代的DataLoader 动态流式读取数据源 不担心内存炸裂 pytorch Data学习三 使用如下方法构造DataLoader 如果num workers设置为N 就
  • kubernetes 1.27.3 集群部署方案

    一 准备环境 1 1 Kubernetes 1 27 3 版本集群部署环境准备 1 1 1 主机硬件配置说明 cpu 内存 硬盘 角色 主机名 系统版本 8C 8G 1024GB master master01 centos 7 9 8C
  • C++STL(5)常用容器介绍(四)list、set、map容器

    1 list 概 述 链表是一种物理存储单元上非连续 非顺序的存储结构 数据元素的逻辑顺序是通过链表中的指针链接次序实现的 链表由一系列结点 链表中每一个元素称为结点 组成 结点可以在运行时动态生成 每个结点包括两个部分 一个是存储数据元素
  • jenkins学习笔记第二篇全局工具配置与结点配置

    1 1jenkins 全局工具配置 maven配置 JDK配置 Ant配置 本地安装的有ANt1 9 配置ANt可以实现后面的 jmeter Ant的自动化接口测试 生成自动化测试报告 Git配置 在配置结点时 先配置全局安全性 Confi
  • php 请求chatgpt3.5 非stream流输出模式代码用于批量发布文章

    以下是模板兔用php写的请求chatgpt3 5 非流输出模式 不是打字特效 的代码示例 这种非流模式一般用于批量生产文章 通过chatgpt你可以大量生产伪原创文章 提供网站收录 近期我们会增加一个wordpress通过GPT批量发布文章
  • 一零六九、MySQL回顾总结

    索引下推 在联合查询的过程中 根据联合索引包含字段直接过滤掉不满足的记录 减少回表次数 能用索引就用索引 覆盖索引 查询字段包含了索引的全部字段聚集索引 将常用的字段作为主键或聚集索引 undolog redolog binlog的区别和联
  • sd和sem啥区别_Mean ± SEM or Mean(SD) 区别

    1 The common descriptive statistics is mean and standard deviation SD SD 平均值和标准偏差 Data not following the normal distribu
  • linux上如何删除文件名乱码的文件

    今天在服务上发现了两个文件名是乱码的文件 如图所示 于是想用rm命令把它们删掉 但提示没有此文件 网上搜了一下 找到解决方法 首先执行ls i命令 此时在文件前面会出现一个数字 这个数字是文件的节点号 接着 执行命令 find inum 节
  • 关于质量,大家都在关注什么?

    转自 ThoughtWorks中国 去年 我们在 数字化时代的软件测试 中看到了2017年软件质量方面的趋势和给测试人员的建议 又一年过去了 大家对软件质量保障和测试的关注有哪些变化呢 我们一起来看看这份质量报告 World Quality
  • minio中的安装启动地址问题

    安装 把包扔进去 赋予权限 chmod x minio 创建一个data目录 address和 console address是MinIO服务器启动命令中的两个参数 它们具有以下区别 address参数 用于指定MinIO服务器监听的S3
  • [转] 新手学Linux:在VMware14中安装CentOS7详细教程及经验

    转自 https blog csdn net yiyihuazi article details 78557216 这里说下自己遇到一个坑 1 如果在公司内部 虚拟机上网可能 需要设置代理 方法如下 在文件后面加上 http proxy h
  • graphics.h图形库:基本概念(2)——坐标

    文章目录 1 物理坐标 2 逻辑坐标 在 EasyX 中 坐标分两种 物理坐标和逻辑坐标 1 物理坐标 物理坐标是描述设备的坐标体系 坐标原点在设备的左上角 X 轴向右为正 Y 轴向下为正 度量单位是像素 坐标原点 坐标轴方向 缩放比例都不
  • java中讲讲FileWriter的用法

    java中讲讲FileWriter的用法 FileWriter的用法 马克 to win 马克 java社区 防盗版实名手机尾号 73203 FileWriter是Writer的继承类 从字面上就可看出 它的主要功能就是能向磁盘上写文件 w
  • 鬼泣4refrain 《鬼泣4 refrain》图文全攻略(iphone版)

    本篇文章由 泉州SEO www 234yp com 整理发布 转载请注明原文地址 www 234yp com Article 147467 html 谢谢合作 鬼泣4refrain 您可能感兴趣的话题 鬼泣4 核心提示 鬼泣4 是 鬼泣 系
  • ADworld_level_2

    以下是adworld里endust师傅的wp checksec扫描 使用ida打开可以发现 初始的buf的空间只有0x88 但是读取我们输入的内容的时候 选择的大小却是0x100 造成了溢出 通过这些 我们直接构建exp from pwn
  • HTTP Status 500 - An exception occurred processing JSP page 我真的看不出来

    1 2 7 8
  • RDBMS(关系型数据库)BLOB类型字段存储图片迁移问题完美解决方案

    目录 1 问题描述 2 问题查找 3 解决方法 1 表输入 2 执行SQL语句修改 1 问题描述 项目在RDBMS 关系型数据库 的mysql中使用BLOB类型字段存储了图片 由于需求问题 需要迁移图片到另外的一个RDBMS 关系型数据库
  • vue3的computed.ts

    vue3的computed ts import effect from effect class ComputedRefImpl public dirty true public value public effect constructo
  • 【大规模 MIMO 检测】基于ADMM的大型MU-MIMO无穷大范数检测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 文献来源 针对大型多用户 MU 多输入多输
  • 文字加减前后缀lisp_华为笔试题---仿LISP算法

    直接上代码 水平有限 欢迎小伙伴们指正 暂不知效率如何 import java util Scanner import java util Stack 仿LISP字符串运算 LISP语言唯一的语法就是括号要配对 形如 OP P1 P2 括号