当前位置: 首页 > news >正文

CSP初赛知识点讲解(六)

CSP初赛知识点讲解(六)

    • 运算表达式
      • 中缀变后缀
      • 表达式求值
      • 前缀表达式
    • 例题训练(八)

运算表达式

运算表达式有三种,前缀表达式,中缀表达式,后缀表达式,我们常用的是中缀表达式,即符号在数字之间, 运算符有优先级,人肉眼看着很方便,计算也比较方便。 但是脑补一下就会发现计算机计算这种表达式很麻烦, 不信你自己写个代码试试,计算机比较好识别的是后缀 表达式,即运算符号在数字后面,遇到符号就把最近的 两个数字计算,这样运算符之间没有优先级。

那么这里就涉及到两个知识

(1)中缀表达式转后缀表达式(反过来)

(2)后缀表达式计算

中缀变后缀

转换规则:

(1)遇到数字的时候直接存入一个新的数组

(2)遇到“(”的时候,无论此时栈顶元素为什么,都入栈

(3)遇到“)”的时候,无论此时栈顶元素为什么,都出栈。依 次把栈顶的元素存入新的数组,直到“(”出栈为止。“(”不放 入数组。

(4)遇到“*”和“/”的时候,如果栈为空或者栈顶元素是左括 号。入栈。如果优先级大于栈顶元素,入栈(乘除的优先级>加减), 如果优先级小于等于栈顶元素,出栈,直到栈顶元素优先级小于 当前字符优先级的时候。当前字符入栈。

(5)遇到“+”和“-”的时候。如果栈为空或者栈顶元素为左括 号,入栈,否则出栈(因为加减的优先级最低,无论栈顶是什么 运算符,优先级都大于等于他,都要出栈),当前字符入栈。

(6)字符串遍历完之后,一次出栈,并存储。

eg:9+(3-1)*3+10/2转为后缀表达式

  • 当前元素:9,直接添加到后缀表达式列表中。

  • 当前元素:+,压入栈中。

  • 当前元素:(,压入栈中。

  • 当前元素:3,直接添加到后缀表达式列表中。

  • 当前元素:-,压入栈中。

  • 当前元素:1,直接添加到后缀表达式列表中。

  • 当前元素:),将栈顶元素弹出并添加到后缀表达式列表中,直到遇到左括号"("。

  • 当前元素:*,压入栈中。

  • 当前元素:3,直接添加到后缀表达式列表中。

  • 当前元素:+,栈顶元素的优先级低于当前运算符,将当前运算符压入栈中。

  • 当前元素:10,直接添加到后缀表达式列表中。

  • 当前元素:/,栈顶元素的优先级低于当前运算符,将当前运算符压入栈中。

  • 当前元素:2,直接添加到后缀表达式列表中。

  • 遍历完毕,将栈中剩余的运算符依次弹出并添加到后缀表达式列表中。

所以最终后缀表达式:9 3 1 - 3 * + 10 2 / +

表达式求值

在中缀转后缀的基础上,我们对这个表达式进行求值

eg:9+(3-1)*3+10/2转为后缀表达式

  • 当前元素:9,压入栈中。

  • 当前元素:3,压入栈中。

  • 当前元素:1,压入栈中。

  • 当前元素:-,从栈中弹出3和1,计算3-1=2,将结果2压入栈中。

  • 当前元素:3,压入栈中。

  • 当前元素:,从栈中弹出2和3,计算23=6,将结果6压入栈中。

  • 当前元素:+,从栈中弹出9和6,计算9+6=15,将结果15压入栈中。

  • 当前元素:10,压入栈中。

  • 当前元素:2,压入栈中。

  • 当前元素:/,从栈中弹出10和2,计算10/2=5,将结果5压入栈中。

  • 当前元素:+,从栈中弹出15和5,计算15+5=20

    所以最终结果为20。

前缀表达式

后缀表达式是运算符在数字后面,那么前缀表达式就很明显是运算符在数字前面,实际上规则和中缀 转后缀差不多。 对于中缀表达式,先倒着读,按照类似中缀转后 缀的方式转换完之和再倒序。

eg:1+2*3+(4*5+6)*7 转换成前缀表达式,第一步先倒着读。

(1)读入‘7’,并送到输出,然后‘*’被读入并压入栈中。 接下来‘)’读入并送到栈中,此时状态如下:

栈:*) 输出:7

(2)接下来读入‘6’,并送到输出,然后读入‘+’此时状态 如下:

栈:* ) + 输出:7 6

(3)然后读入‘5’,并送到输出,然后继续读入‘*’,由于 ‘*’的优先级比‘+’高,所以直接加入栈中,再将‘4’送 到输出,因此状态如下:

栈:* ) + * 输出:7 6 5 4

(4)下一个读入的符号‘(’,由于规则,因此将符号栈中的 操作符依次出栈,然后读入‘4’,并在最后将右括号弹出:

栈:* 输出: 7 6 5 4 * +

(5)继续读入,此时读入‘+’,由优先级小于栈中‘*’的优 先级,因此依照规则,依次出栈,最后将‘+’入栈,接下来 读入‘3’:

栈:+ 输出:7 6 5 4 * + * 3

(6)往后读入的符号是‘*’,将‘*’入栈。然后将‘2’放 入输出:

栈:+ * 输出:7 6 5 4 * + * 3 2

(7)现在读入‘+’,由于符号栈中存在‘+’且它们的优先级 相同,根据规则,除非,优先级大于栈顶元素,否则不出栈, 依次栈中状态如下:

栈:+ + 输出:7 6 5 4 * + * 3 2 *

(8)下一个读入‘1’:

栈:+ + 输出:7 6 5 4 * + * 3 2 * 1

(9)现在输入为空,弹出所有栈中元素

栈:空 输出:7 6 5 4 * + * 3 2 * 1 + +

(10)最后翻转 输出:+ + 1 * 2 3 * + * 4 5 6 7

前缀表达式转换成中缀表达式也差不多。 第一步,先倒序,剩下的和后缀转中缀差不多

比如: + + 1 * 2 3 * + * 4 5 6 7

翻转:7 6 5 4 * + * 3 2 * 1 + +

遇到数字就放入栈内,遇到运算符就栈顶两个元素计算。

例题训练(八)

  • 表达式a*(b+c)*d的后缀形式是( )

    A:a b c d * + *

    B:a b c + * d *

    C:a * b c + * d

    D:b + c * a * d

​ 答案:B

​ 题解:可以直接模拟得到

  • 表达式a*d-b*c的前缀形式是( )

    A:a d * b c * -

    B:- * a d * b c

    C:a * d – b * c

    D:- * * a d b c

​ 答案:B

​ 题解:可以直接模拟得到

相关文章:

CSP初赛知识点讲解(六)

CSP初赛知识点讲解(六) 运算表达式中缀变后缀表达式求值前缀表达式 例题训练(八) 运算表达式 运算表达式有三种,前缀表达式,中缀表达式,后缀表达式,我们常用的是中缀表达式&#xf…...

linux rocky 9.2系统安装mysql-wsrep-8.4.2-26.20-linux-x86_64.tar.gz二进制包

1.环境准备, ①装好Rocky linux9.2系统,设置好IP nmcli con mod ens160 ipv4.addresses 192.168.0.106/24 nmcli con mod ens160 ipv4.gateway 192.168.0.2 nmcli con mod ens160 ipv4.dns 114.114.114.114 nmcli con up ens160 nmcli con mod ens…...

QT实现上传服务器功能

代码如下所示: void UploadZipFileToServer(const QString& strPath) {m_pFile new QFile(strPath);// 创建HTTP多部份请求QHttpMultiPart *multiPart new QHttpMultiPart(QHttpMultiPart::FormDataType);QHttpPart keyPart;keyPart.setHeader(QNetworkReques…...

元岳食堂采购供应链系统-智慧食堂数据化解决方案

随着社会的发展和科技的进步,在数字化浪潮的推动下,智慧食堂供应链系统逐渐成为食堂管理的重要工具。在此背景下,元岳食堂采购供应链系统应运而生,该系统通过其独特的数字化和自动化功能,能够对食堂的采购、储存、配送…...

基于Java+SpringBoot+Vue的影城管理系统

基于JavaSpringBootVue的影城管理系统 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 哈喽…...

自定义starter

依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 ht…...

Docker 入门全攻略:安装、操作与常用命令指南

目录 Docker 入门全攻略&#xff1a;安装、操作与常用命令指南 一、引言 二、Docker 下载与安装 2.1 Docker 的系统要求 2.2 安装步骤 ①对于 Windows 的安装指南 ②对于 macOS 的安装指南 ③对于 Linux 的安装指南 三、Docker 的基本概念 3.1 镜像&#xff08;Image…...

mstsc被卸载,远程桌面mstsc.exe重装

官网下载地址g卸载和重新安装远程桌面连接 | Microsoft Learn 卸载和重新安装远程桌面连接 | Microsoft Learn 下载地址 https://wwm.lanzouj.com/ioR4y26z7rle 下载后重新安装...

从根儿上学习spring 十一 之run方法启动第四段(5)

图15-AbstractAutowireCapableBeanFactory#doCreateBean方法 我们接着讲doCreateBean方法&#xff0c;之前对循环依赖做了些解释&#xff0c;我们接着往下看populateBean(beanName, mbd, instanceWrapper)方法 图15-572行 这行就是调用populateBean(beanName, mbd, instanceW…...

常见8种数据结构

常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图&#xff0c;每种数据结构都有其特点&#xff0c;如下&#xff1a; 常见数据结构 1.数组2.链表3.队列4.栈5.树6.图7.哈希表8.堆 1.数组 特点&#xff1a; 固定大小的线性数据结构支持快速随机访问插入和删除效率…...

黑马Java零基础视频教程精华部分_11_面向对象进阶(3)_抽象类、接口、适配器

《黑马Java零基础视频教程精华部分》系列文章目录 黑马Java零基础视频教程精华部分_1_JDK、JRE、字面量、JAVA运算符 黑马Java零基础视频教程精华部分_2_顺序结构、分支结构、循环结构 黑马Java零基础视频教程精华部分_3_无限循环、跳转控制语句、数组、方法 黑马Java零基础视…...

Promethues Metrics

Metrics Metrics可分为三部分&#xff1a; HELP 描述metric作用TYPE metric类别 TYEP Counter 某个事件发生的次数数字只能增长 Total reuqests Total ExceptionsGauge 描述当前值可以上升或下降 CurrentCPU Utilization Available System Memory Number of concurren…...

公网IP与私网IP具体有哪些区别?

1.接入方式不同 公网IP以公网连接Internet上的非保留地址&#xff0c;私网IP则是局域网上的IP&#xff0c;通过NAT才能够与公网进行通信。 2.特点不同 公网IP由国际互联网络信息中心InterNIC负责,将IP地址分配给注册并向InterNIC提出申请的机构或组织。私网IP则是为节省可分配…...

LeetCode——3143. 正方形中的最多点数

通过万岁&#xff01;&#xff01;&#xff01; 题目&#xff1a;给你一个n*2的数组&#xff0c;然后第i行表示第i个点的坐标&#xff0c;然后还给你了一个字符串s&#xff0c;s[i]则表示第i个点的名称。然后让你找一个中心是&#xff08;0,0&#xff09;的正方形&#xff0c;…...

const重新赋值的问题

问: const haveNextPage false; // 默认没有下一页fetch(historyFullUrl).then(data > {haveNextPage data.data.has_more;这段代码有什么问题吗? 回答: 在你的代码中&#xff0c;有一个潜在的问题涉及到 haveNextPage 的赋值。你定义了 haveNextPage 作为一个常量&am…...

python开发上位机 - PyCharm环境搭建、安装PyQt5及工具

目录 简介&#xff1a; 一、安装PyCharm 1、下载 PyCharm 2、PyCharm安装 1&#xff09;配置安装目录 2&#xff09;安装选项 3、问题及解决方法 二、安装PyQt5 1、打开 Pycharm&#xff0c;新建 Project 2、安装 pyqt5 3、安装很慢怎么办&#xff1f; 4、安装 pyq…...

day02-安装虚拟机

1. 安装配置 前面一直下一步就OK 2. 虚拟机操作系统配置 语言 中文 软件安装&#xff1a; 最小安装&#xff0c;标准&#xff0c;调试工具&#xff0c;开发工具&#xff0c;系统工具&#xff0c;man手册 网络和主机名配置 主机名&#xff0c;自己起名字 网络配置 常规 &g…...

Qt:线程

一个Qt窗口生成后&#xff0c;为什么拖动窗口&#xff0c;窗口可以随着鼠标移动或放大缩小 因为对窗口操作后&#xff0c;都有对应的事件产生&#xff0c;Qt在其框架中对这些事件进行了默认处理 一个Qt程序默认只有一个线程&#xff0c;称为主线程&#xff08;也叫ui线程&#…...

VisionPro二次开发学习笔记11-使用 Caliper和Fixture定位Blob工具检测方块

该示例演示了如何使用卡尺工具和夹具工具来固定 Blob 工具。示例代码将检测图像上部区域中小方块的存在。当点击“运行”按钮时&#xff0c;将读取一张新图像。卡尺工具将被运行&#xff0c;卡尺工具的输出 Y 信息将传递给夹具工具。夹具工具使用来自卡尺工具的 Y 信息和新图像…...

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(五)卡尔曼滤波器一:认知卡尔曼滤波器;协方差矩阵与方差;

卡尔曼滤波器 为了研究卡尔曼&#xff0c;我阅读了大量博文。不敢说完全吃透&#xff0c;但是在做一件什么事&#xff0c;可以通过下面这文章来理解&#xff0c;我读了不下五遍。并整理标准重点&#xff0c;添加自己的一些见解。 自动驾驶传感器融合算法 - 自动驾驶汽车中的激…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》

引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

MySQL中【正则表达式】用法

MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现&#xff08;两者等价&#xff09;&#xff0c;用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例&#xff1a; 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

【碎碎念】宝可梦 Mesh GO : 基于MESH网络的口袋妖怪 宝可梦GO游戏自组网系统

目录 游戏说明《宝可梦 Mesh GO》 —— 局域宝可梦探索Pokmon GO 类游戏核心理念应用场景Mesh 特性 宝可梦玩法融合设计游戏构想要素1. 地图探索&#xff08;基于物理空间 广播范围&#xff09;2. 野生宝可梦生成与广播3. 对战系统4. 道具与通信5. 延伸玩法 安全性设计 技术选…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

20个超级好用的 CSS 动画库

分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码&#xff0c;而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库&#xff0c;可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画&#xff0c;可以包含在你的网页或应用项目中。 3.An…...

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement

Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...