[洛谷]P1449 后缀表达式

news2024/11/17 16:13:53

[洛谷]P1449 后缀表达式

  • 一、问题描述:
    • 题目描述
    • 输入格式
    • 输出格式
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 提示
  • 二、思路分析
    • 1、算法标签
    • 2、思路
  • 三、代码实现

一、问题描述:

传送门:[洛谷]P1449 后缀表达式

题目描述

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

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

3.5.2.-*7.+@

样例输出 #1

16

提示

数据保证, 1 ≤ ∣ s ∣ ≤ 50 1 \leq |s| \leq 50 1s50,答案和计算过程中的每一个值的绝对值不超过 1 0 9 10^9 109

二、思路分析

1、算法标签

这道题考察的是二叉树的后序遍历,以及数据结构栈的使用

2、思路

很多人会感到疑惑,为什么这道题考察的是二叉树的后序遍历呢?我们不妨将这道题的输入转换为一颗二叉树。

在这里插入图片描述
那么我们对这棵树根据:左子树–>右子树—>根的顺序进行遍历,我们会得到如下的式子:
在这里插入图片描述

在这里插入图片描述
我们发现进行后序遍历后,就会得到我们的最终结果。

而我们后序遍历依次得到的是:

5,2,-
3,3,*
9,7,+

我们会发现,只要遇到符号,就将该符号前面的数字拿出来计算。
而且我们拿出来的数据不是最先加进去的,而是运算符前面的后进的数据。而这种后进先出的特点恰好符合数据结构中栈的特点。

因此,我们使用栈来解决这个问题。

我们创建一个栈 s t k stk stk来存储数字。

我们读取字符串,读到数字的话,我们就让这个数字进入 s t k stk stk中,每当读到字符的时候,我们就从 s t k stk stk中取出两个栈顶元素,进行运算。然后,我们再将运算的结果放回栈中。

最终当所有的运算都结束后,我们的 s t k stk stk中应当仅仅剩余一个元素。而这个元素就是我们的最终答案。

三、代码实现

#include<iostream>
#include<stack>
using namespace std;
stack<int>stk;
int cal(char a)
{
    int t1=stk.top();
    stk.pop();
    int t2=stk.top();
    stk.pop();
    if(a=='+')return t2+t1;
    else if(a=='-')return t2-t1;
    else if(a=='*')return t2*t1;
    else return t2/t1;
}
int main()
{
    string s;
    cin>>s;
    for(int i=0;i<s.size()-1;i++)
    {
        if(s[i]<='9'&&s[i]>='0')
        {
            int t=0;
            while(s[i]<='9'&&s[i]>='0')
            {
                t=t*10+s[i]-'0';
                i++;
            }
            stk.push(t);
        }
        if(s[i]!='.')
        {
            stk.push(cal(s[i]));
        }
    }
    cout<<stk.top()<<endl;
    return 0;
}

在这里插入图片描述

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

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

相关文章

DJ14 简单接口电路及应用

目录 一、I/O 接口 1. 接口和端口的关系 2. 接口的基本结构 3. 8086/8088 端口编址 二、简单接口芯片 1. 74LS244 三态门 2. 74LS273 锁存器 3. 74LS374锁存器 4. 综合应用 三、基本输入输出方式 1. 无条件传送方式 2. 查询工作方式 一、I/O 接口 1. 接口和端口的…

校招面试真题 | 你的期望薪资是多少?为什么?

很多人去面试的时候&#xff0c;就像打游戏&#xff0c;过五关斩六将&#xff0c;终于到最后一关了&#xff0c;但是谈薪资的难度堪比打游戏中搞定终级 boss 的难度&#xff0c;真的是太「南」了&#xff0c;好多人都是因为这个问题让自己五味杂陈呀。报高了怕好 offer 失之交臂…

基因编辑相关最新研究进展(2022年12月)

【1】西湖大学马丽佳团队开发新型CRISPR脱靶和DNA易位检测工具 2022-12-15报道&#xff0c;2022年12月12日&#xff0c;西湖大学生命科学学院马丽佳团队在 Nature Communications 期刊发表了题为&#xff1a;PEAC-seq adopts Prime Editor to detect CRISPR off-target and DN…

C++11标准模板(STL)- 算法(std::next_permutation)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 产生某个元素范围的按字典…

Spring Cloud 2022.0.0 正式发布,代号 “Kilburn“

Spring Cloud 2022.0.0 已正式发布。 获取地址&#xff1a;https://repo1.maven.org/maven2/org/springframework/cloud/spring-cloud-dependencies/2022.0.0/ Spring Cloud 为开发人员提供了工具&#xff0c;以快速构建分布式系统中的某些常见模式&#xff08;例如&#xff1a…

java中的垃圾回收算法

java中有四种垃圾回收算法&#xff0c;分别是&#xff1a; 标记清除法、标记整理法、复制算法、分代收集算法 1、标记清除法: 第一步:利用可达性去遍历内存&#xff0c;把存活对象和垃圾对象进行标记; 第二步:在遍历一遍&#xff0c;将所有标记的对象回收掉; 特点:效率不行…

Java+MySQL基于ssm的超市进销存会员管理系统

随着我国经济的高速增长,各类超市和便利店也是越来越多,超市和便利店的出现,方便了人们对于日常生活消费的需要,为了能够更好的对超市的顾客进行服务,大多数超市提出了会员的机制,通过这种机制来增加用户的黏度,在给用户提供更好的服务的同时也提高了营业额。 超市会员管理系统…

转行,你考虑清楚了吗?

“我为什么离开中石油”写完后&#xff0c;引发了不少人的共鸣&#xff0c;一些在工作中苦苦挣扎、渴望转行的朋友&#xff0c;在微信上询问我转行情况和转行建议。 非常感谢朋友们的关心和信任&#xff0c;然而我并非什么职业规划大师&#xff0c;只是一个在石油圈混了五年的…

ChatGPT进化的秘密

本文作者&#xff0c;符尧 yao.fued.ac.uk&#xff0c;爱丁堡大学 (University of Edinburgh) 博士生&#xff0c;本科毕业于北京大学&#xff0c;与彭昊&#xff0c;Tushar Khot 在艾伦人工智能研究院 (Allen Institute for AI) 共同完成英文原稿&#xff0c;与剑桥大学郭志江…

搞懂Redis 数据存储原理,别只会 set、get 了

我的核心模块如图 1-10。 图 1-10 Client 客户端&#xff0c;官方提供了 C 语言开发的客户端&#xff0c;可以发送命令&#xff0c;性能分析和测试等。 网络层事件驱动模型&#xff0c;基于 I/O 多路复用&#xff0c;封装了一个短小精悍的高性能 ae 库&#xff0c;全称是 a si…

【C语言】函数的声明_函数定义_函数调用_函数递归 [函数的基本使用]

文章目录前言1.函数是什么?2.C语言中函数的分类2.1 库函数2.2 自定义函数3.函数的参数3.1 实际参数&#xff08;实参&#xff09;&#xff1a;3.2 形式参数&#xff08;形参&#xff09;&#xff1a;4.函数的调用4.1 传值调用4.2 传址调用4.3 练习5.函数的嵌套调用和链式访问5…

羊没羊,好像也没那么重要了!

疫情管控刚一放开&#xff0c;我就一直在想&#xff0c;如何降低羊&#x1f411;的概率和影响。​由于家里老人身体不太好&#xff0c;孩子年龄又太小&#xff0c;加上只有我一个人整天在外面跑&#xff0c;感染的几率最大。所以最后想了一下&#xff0c;决定先在外面租个房子&…

零基础学编程,怎么开始学习?

编程零基础的话&#xff0c;我先建议你看一些经典的书籍&#xff0c;抑或是通俗易懂的计算机常识书。 这几本书各有千秋&#xff0c;我参考了我自己尝试过的几种方法&#xff0c;可以为你选择最适合你的学习方法提供一种参考。首先要判断你的决心有多大&#xff0c;一则花费金…

华为云会议,开会就是如此简单

现在工作节奏加快&#xff0c;高效沟通&#xff0c;快速决策&#xff0c;立刻执行成为组织提升整体效益的关键&#xff0c;而会议作为企业之间重要的沟通工具&#xff0c;被广泛的应用于日常工作中&#xff0c;云会议更可以跨越时空的限制&#xff0c;更为方便快捷。 华为云会议…

UML类图语法介绍

UML类图语法介绍一 官方定义基本介绍UML 图分类建模工具二 六大关系2.1 依赖关系代码体现UML图示2.2 泛化关系代码体现UML图示2.3 实现关系代码体现UML图示2.4 关联关系代码体现UML图示2.5 聚合关系代码体现UML图示2.6 组合关系代码体现UML图示一 官方定义 UML - Unified model…

设置开机自动启动jupyter notebook及远程访问的方式

jupyter notebook远程访问设置 1.安装 conda activate abc #激活虚拟环境[不在虚拟环境中可以省略此步骤] pip install jupyter #安装 jupyter notebook --generate-config #生成配置文件备注&#xff1a;配置文件的所在路径一般为 ~/.jupyter/jupyter_notebook_config.py 注…

四、ArrayList底层源码详解

文章目录特点底层源码分析创建无参构造器有参构造器传入集合的有参构造器扩容注意new ArrayList(0)菜鸟教程ArrayList讲解特点 可以加入控制null(可加入多个)底层是数组实现的ArrayList基本等同于Vector&#xff0c;除了ArrayList是线程不安全(执行效率高)看源码(没有synchron…

“消费盲返”就像一盒巧克力,你永远不知道下一颗是什么味道

如今电商平台竞争越来越激烈&#xff0c;传统电商直播短视频带货拼团带货内卷严重&#xff0c;我就经常刷抖音某多多看见各种优惠&#xff0c;感觉以前在实体店上面买东西都是冤大头&#xff0c;但是随之而来的是商家引流成本越来越高。 这些年来&#xff0c;互联网迅猛发展&am…

Allegro如何批量添加丝印文字操作指导

Allegro如何批量添加丝印文字操作指导 当需要在PCB上需要大量添加丝印文字的时候,是个较大的工作量,Allegro支持批量添加丝印文字到PCB上,如下图 具体操作如下 新建一个文本文档在文本文档中添加好需要的文字

红黑树详解

1.概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xff0c;可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制&#xff0c;红黑树确保没有一条路径会比其他路径长出俩倍&#xff0c;因而是接近…