【C/C++】后缀表达式 蓝桥杯/ACM备赛

核心考点:1.栈的应用 2.字符串处理

题目描述

所谓后缀表达式是指这样的一个表达式:式中不再引用括号,运算符号放在两个运算对象之后,所有计算按运算符号出现的顺序,严格地由左而右新进行(不用考虑运算符的优先级)。

本题中运算符仅包含 +-*/+-*/。保证对于 // 运算除数不为 0。特别地,其中 // 运算的结果需要向 0 取整(即与 C++ / 运算的规则一致)。

如:3*(5-2)+73*(5-2)+7 对应的后缀表达式为:3.5.2.-*7.+@3.5.2.-*7.+@。在该式中,@ 为表达式的结束符号。. 为操作数的结束符号。

输入格式

输入一行一个字符串 ss,表示后缀表达式。

输出格式

输出一个整数,表示表达式的值。

输入输出样例

输入 #1

3.5.2.-*7.+@

输出 #1

16

输入 #2

10.28.30./*7.-@

输出 #2

-7

详细解答:

#include <iostream>
#include <stack>
#include <sstream>
using namespace std;int main()
{stringstream streamer;  // 用于存储当前读取的数字string str;  // 存储输入的后缀表达式getline(cin, str, '@');  // 读取输入的后缀表达式,遇到 '@' 时结束输入stack<int> sta;  // 用栈来存储操作数// 遍历后缀表达式中的每个字符for (auto &c : str){if (c == '.')  // 处理操作数结束符 '.'{int val;streamer >> val;  // 读取当前数字sta.push(val);  // 将操作数压入栈streamer.clear();  // 清空字符串流,为下一次读取做准备}else if (isdigit(c))  // 如果是数字字符,加入到字符串流中streamer << c;else  // 如果是运算符{int a, b;a = sta.top();  // 弹出栈顶的第一个操作数sta.pop();b = sta.top();  // 弹出栈顶的第二个操作数sta.pop();// 根据不同的运算符进行相应的运算switch (c){case '+':  // 加法sta.push(a + b);break;case '-':  // 减法sta.push(b - a);break;case '*':  // 乘法sta.push(a * b);break;case '/':  // 除法sta.push(b / a);  // 向0取整的除法(C++中的整数除法)break;}}}printf("%d", sta.top());  // 输出栈顶的值,即表达式的计算结果return 0;
}

核心知识积累:

1.通过stringstreamer字符串流将字符型和整型进行转换

stringstreamer streamer;
streamer<<c;
steamer>>val;

2.循环语句的写法:for(auto &c:str)

这句话的意思是:定义一个变量c,从str中逐一取元素,c的类型根据str决定,所以前面是auto

3.getline()函数

getline(cin,str,'@');若有三个参数,意思是遇见@停止输入; 

getline(cin,str);若只有两个参数,则意思是遇见回车停止输入。 

题目解析

1. 思路分析

本题是关于后缀表达式的求值问题。后缀表达式的特点是:没有括号,运算符出现在操作数之后。解决此类问题的常见方法是使用栈来存储操作数。对于每个符号的处理可以分为以下几步:

  • 遇到数字:将数字压入栈中。
  • 遇到运算符:弹出栈顶的两个操作数,进行相应的运算,然后将运算结果重新压入栈中。
  • 最后,栈顶的值即为整个表达式的结果。
2. 栈的使用

栈是本题的核心数据结构。后缀表达式中,运算符总是出现在两个操作数之后,意味着在运算符出现时,操作数已经在栈中准备好。因此,栈可以方便地管理这些操作数并执行运算。

  • 当遇到数字时,我们将其压入栈。
  • 当遇到运算符时,我们从栈中弹出两个操作数,执行运算,然后将结果再压入栈中。
3. 运算符处理

在本题中,支持的运算符有+-*/,其中 / 运算符要求向0取整,这与大多数编程语言的向下取整规则不同。C++中的整型除法会自动执行向0取整(即除法结果的小数部分被截断)。

4. 输入输出格式
  • 输入:一个字符串表示后缀表达式,表达式中的数字和运算符通过.@符号进行分隔,@表示表达式的结束。
  • 输出:一个整数,表示后缀表达式的计算结果。

5.易错点:push中b-a还是a-b要注意,以及除法

题目来源:P1449 后缀表达式 - 洛谷

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

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

相关文章

关于YApi接口操作

YApi有 接口集合 和 测试集合 两个概念。 接口集合 将接口进行分类&#xff0c;使接口结构更清晰&#xff0c;一个接口只能属于一个集合&#xff0c;且不允许与其他接口重名。测试集合 为了方便我们测试接口&#xff0c;测试集合 将若干接口组合在一起&#xff0c;在这里一个接…

Django REST Framework (DRF) 中用于构建 API 视图类解析

Django REST Framework (DRF) 提供了丰富的视图类&#xff0c;用于构建 API 视图。这些视图类可以分为以下几类&#xff1a; 1. 基础视图类 这些是 DRF 中最基础的视图类&#xff0c;通常用于实现自定义逻辑。 常用类 APIView&#xff1a; 最基本的视图类&#xff0c;所有其…

Django简介

Django是什么 Web应用程序是指在服务器端运行的程序&#xff0c;不需要单独安装&#xff0c;而Django就是其中一个非常流行的框架。 网站运行的主要原理 网站运行的本质就是服务器与客户端之间的数据传输&#xff0c;而其中&#xff0c;超文本传输协议&#xff08;HTTP&…

JavaScript基础-函数(完整版)

文章目录 函数基本使用函数提升函数参数arguments对象&#xff08;了解&#xff09;剩余参数(重点)展开运算符(...) 逻辑中断函数参数-默认参数函数返回值-return作用域(scope)全局作用域局部作用域变量的访问原则垃圾回收机制闭包 匿名函数函数表达式立即执行函数 箭头函数箭头…

1.21作业

1 unserialize3 当序列化字符串中属性个数大于实际属性个数时&#xff0c;不会执行反序列化 外部如果是unserialize&#xff08;&#xff09;会调用wakeup&#xff08;&#xff09;方法&#xff0c;输出“bad request”——构造url绕过wakeup 类型&#xff1a;public class&…

LLaMA-Factory|微调大语言模型初探索(3),qlora微调deepseek记录

前言 上篇文章记录了使用lora微调llama-1b,微调成功,但是微调llama-8b显存爆炸,这次尝试使用qlora来尝试微调参数体量更大的大语言模型,看看64G显存的极限在哪里。 1.Why QLora? QLoRA 在模型加载阶段通过 4-bit 量化大幅减少了模型权重的显存占用。QLoRA 通过 反量化到 …

TCP传输可靠性保障:理论讲解→实战面试解析

一、TCP为何需要可靠性保障&#xff1f; TCP作为互联网的"运输队长"&#xff0c;承担着80%以上的网络数据传输任务。其核心使命是&#xff1a;在不可靠的IP层之上&#xff0c;构建端到端的可靠传输通道。 想象一下网购时商品运输需要防丢包、防损坏、防错序&#xff…

一篇搞懂vue3中如何使用ref、reactive实现响应式数据

ref 可实现 基本类型、对象类型响应式数据 reactive&#xff1a;只能实现 对象类型响应式 ref实现 基本类型 数据响应式&#xff1a; <template><div class"person"><h2>姓名&#xff1a;{{ name }}</h2><h2>年龄&#xff1a;{{ ag…

Linux 内核自旋锁spinlock(四)--- queued spinlock

文章目录 前言一、queued spinlock1.1 简介1.2. spin_lock/spin_unlock 二、源码解析2.1 struct qspinlock2.2 struct qnode2.3 queued_spin_lock2.3.1 快速申请通道CPU0申请锁 2.3.2 慢速申请通道CPU0/1申请锁CPU0/1/2申请锁CPU0/1/2/3申请锁 queued_spin_lock_slowpath总结 2…

一种最常见的js加密解密

前言 在前端开发的广袤天地中&#xff0c;你是否遭遇过一些看似“乱码”般的代码&#xff0c;根本无从下手理解&#xff1f;这其实很可能是被 _0x处理过的代码。_0x就像一位神秘的“化妆师”&#xff0c;能把原本清晰的代码改头换面。今天&#xff0c;我就来分享如何破解这些被…

git使用-克隆远程项目、分支管理

文章目录 克隆远程项目到本地1. 远程找到需要克隆的项目&#xff0c;复制ssh地址2. idea开启git版本控制&#xff08;如果已经开了&#xff0c;忽略此步骤&#xff09;3. clone远端项目4. 克隆完成 分支管理1. 新建分支2. 切换分支3. 合并分支4. 储存变化 克隆远程项目到本地 …

Python实战:Excel中文转拼音工具开发教程

在日常办公中&#xff0c;我们经常需要处理Excel文件&#xff0c;有时候需要将中文转换为拼音缩写以方便检索和使用。今天我将分享一个使用Python开发的小工具&#xff0c;它可以自动将Excel文件中指定列的中文转换为拼音缩写。 C:\pythoncode\new\ConvertExcelcontentToPinyin…

什么是矩阵账号?如何高效运营tiktok矩阵账号

‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​​‌​​‌​‍‌​‌‌​‌‌‌‍‌​‌​‌​​​‍‌​​‌​‌‌​‍‌​​​​‌‌​‍‌​‌​​‌‌‌‍‌​​‌‌​‌​‍‌​‌​​‌‌‌‍‌​‌‌‌​​‌‍‌‌​​‌‌‌​‍‌‌​​‌‌​​‍‌…

Docker-技术架构演进之路

目录 一、概述 常见概念 二、架构演进 1.单机架构 2.应用数据分离架构 3.应用服务集群架构 4.读写分离 / 主从分离架构 5.引入缓存 —— 冷热分离架构 6.垂直分库 7.业务拆分 —— 微服务 8.容器化引入——容器编排架构 三、尾声 一、概述 在进行技术学习过程中&am…

并查集算法篇上期:并查集原理及实现

引入 那么我们在介绍我们并查集的原理之前&#xff0c;我们先来看一下并查集所应用的一个场景&#xff1a;那么现在我们有一个长度为n的数组&#xff0c;他们分别属于不同的集合&#xff0c;那么现在我们要查询数组当中某个元素和其他元素是否处于同一集合当中&#xff0c;或者…

MacOS 15.3 卸载系统内置软件

1、关闭系统完整性&#xff08;SIP&#xff09; 进入恢复模式(recovery) 如果您使用的是黑苹果或者白苹果&#xff0c;可以选择 重启按住CommandR 进入&#xff0c;如果是M系列芯片&#xff0c;长按开机键&#xff0c;进入硬盘选择界面进入。 我是MacMini M4芯片&#xff0c;关…

内容中台重构企业内容管理的价值维度与实施路径

内容概要 在数字化转型进程中&#xff0c;企业内容管理&#xff08;ECM&#xff09;与内容中台的差异性体现在价值维度的重构与能力边界的突破。传统ECM系统通常聚焦于文档存储、权限控制等基础功能&#xff0c;而内容中台通过标准化流程引擎与智能工具链&#xff0c;构建起覆…

挖矿病毒实战分析

场景说明 运维人员再设备巡检过程中发现CPU莫名到达百分百&#xff0c;出现异常&#xff0c;请开始你的应急响应排查 cpu百分百&#xff0c;基本就可以确定是中了挖矿病毒了 我们使用命令ps -aux查看进程&#xff0c;或者使用top -c查看进程&#xff0c;排查挖矿程序 使用t…

蓝桥杯好数

样例输入&#xff1a; 24 输出&#xff1a;7 输入&#xff1a;2024 输出&#xff1a; 150 思路&#xff1a;本题朴素方法的时间复杂度是O(n * log10(n)) &#xff0c;不超时。主要考察能否逐位取数&#xff0c;注意细节pi&#xff0c;这样不会改变i,否则会导致循环错误。 #in…

cs*n 网页内容转为html 加入 onenote

csdn上有好用的内容&#xff0c;我们怎么将它们加到 onenote 里吃灰呢。 一、创建 新html create_html.py import sysdef create_html_file(filename):# 检查是否提供了文件名if not filename:print("请提供HTML文件名")return# 创建HTML内容html_content f"…