【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.pswp.cn/news/895715.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895715.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895715.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【AI實踐】deepseek支持升級git

當前Windows 11 WSL的git是2.17&#xff0c;Android Studio提示需要升級到2.19版本 網上找到指導文章 安裝git 2.19.2 cd /usr/src wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz tar xzf git-2.19.2.tar.gz cd git-2.19.2 make prefix/usr/l…

QEMU 搭建 Ubuntu x86 虛擬機

1. 安裝 QEMU 在 Ubuntu 系統中&#xff0c;可以通過以下命令安裝 QEMU&#xff1a; sudo apt-get update sudo apt-get install qemu-system-x86_64 qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager2. 創建虛擬硬盤鏡像 qemu-img create -f raw ubuntu…

Linux驅動層學習:Linux 設備樹

設備樹是一種數據結構&#xff0c;包含多個節點&#xff0c;用于描述硬件設備及其配置信息&#xff0c;它通常用于嵌入式系統中&#xff0c;尤其是在Linux操作系統中&#xff0c;幫助操作系統識別和管理硬件資源&#xff0c;設備樹不是代碼&#xff0c;而是一種用數據描述硬件信…

金蝶云星空與釘釘高效數據集成案例分享

金蝶云星空數據集成到釘釘的技術案例分享 在企業信息化系統中&#xff0c;數據的高效流動和實時反饋是提升業務效率的關鍵。本文將聚焦于一個具體的系統對接集成案例&#xff1a;如何將金蝶云星空的數據集成到釘釘&#xff0c;并實現審核狀態的回傳提示。 本次集成方案名為“…

圖形渲染(一)——Skia、OpenGL、Mesa 和 Vulkan簡介

1.Skia —— 2D 圖形庫 Skia 是一個 2D 圖形庫&#xff0c;它的作用是為開發者提供一個高層次的繪圖接口&#xff0c;方便他們進行 2D 圖形渲染&#xff08;比如繪制文本、形狀、圖像等&#xff09;。Skia 本身不直接管理 GPU 或進行底層的渲染工作&#xff0c;而是通過 底層圖…

GIT提錯分支,回滾提交

1. 準備示例 假設我們有三次提交&#xff1a; test1&#xff1a;需要在 master 分支提交test2、test3&#xff1a;需要在 develop 分支提交 遠端線上記錄 2. 步驟 選擇需要回退的記錄&#xff1a; 選中需要回退的 commit&#xff0c;選擇 Reset Current Branch to Here...。…

【原創】在ubuntu中搭建gradle開發環境

檢查Linux版本 rootwww:~# hostnamectlStatic hostname: www.0x88.comIcon name: computer-vmChassis: vmMachine ID: 30fa955a36be492ca459599ef20bc508Boot ID: 37084dbe36f44adaa075e8f9a98f132eVirtualization: kvm Operating System: Ubuntu 22.04.5 LTSKernel: Linux 5.…

【JavaEE進階】MyBatis入門

目錄 &#x1f334;前言 &#x1f332;什么是MyBatis? &#x1f333;準備工作 &#x1f6a9;創建工程 &#x1f6a9;配置數據庫連接字符串 &#x1f6a9;數據準備 &#x1f6a9;編寫持久層代碼 &#x1f343;單元測試 &#x1f334;前言 在應?分層學習時,我們了解到…

以太網詳解(八)傳輸層協議:TCP/UDP 協議

文章目錄 傳輸層協議概述為什么需要傳輸層&#xff1f;傳輸層功能網絡層與傳輸層在實現 “端到端” 傳輸的異同兩類服務:面向連接/無連接服務 傳輸控制協議 TCPTCP 協議數據單元格式TCP 的重傳機制快重傳和快恢復快重傳舉例快恢復算法 用戶數據報協議 UDPUDP 概述UDP 基本工作過…

Electron 客戶端心跳定時任務調度庫調研文檔 - Node.js 任務調度庫技術調研文檔

Electron 客戶端心跳定時任務調度庫調研文檔 - Node.js 任務調度庫技術調研文檔 本文將對七個流行的定時任務調度庫&#xff1a;node-cron、rxjs、bull、node-schedule、agenda、bree、cron。這些庫都可以用來處理定時任務&#xff0c;但它們的特點和適用場景有所不同。我們將從…

DeepSeek 開放平臺無法充值 改用其他平臺API調用DeepSeek-chat模型方法

近幾天DeepSeek開放平臺無法充值目前已經關閉狀態&#xff0c;大家都是忙著接入DeepSeek模型 &#xff0c;很多人想使用DeepSeek怎么辦&#xff1f; 當然還有改用其他平臺API調用方法&#xff0c;本文以本站的提供chatgpt系統為例&#xff0c;如何修改DeepSeek-chat模型API接口…

pix2text 使用經驗

給同行打雞血 &#x1f60a; 構建結構化的數理領域知識庫&#xff1a; 提高可訪問性和可搜索性 Markdown和LaTeX格式&#xff1a;這兩種格式易于在線發布和共享&#xff0c;有助于提高數學內容的可訪問性。搜索引擎優化&#xff1a;將PDF內容轉換為標記語言&#xff0c;可以…

Linux(centos)系統安裝部署MySQL8.0數據庫(GLIBC版本)

安裝前檢查服務器glibc版本&#xff0c;下載對應版本包 rpm -qa | grep glibc mysql安裝包及依賴包已整理好&#xff0c;下載地址&#xff1a;https://pan.quark.cn/s/3137acc814c0&#xff0c;下載即可安裝 一、下載MySQL mysql安裝包及依賴包已整理好&#xff0c;下載地址…

6.2.圖的存儲結構-鄰接矩陣法

一.鄰接矩陣法存儲不帶權圖&#xff1a; 結點不帶權值&#xff1a; 1.左圖的無向圖中&#xff0c;A到B直達的有一條路&#xff0c;所以A行B列的值為1&#xff1b; 左圖的無向圖中&#xff0c;A到F沒有直達的路&#xff0c;所以A行F列的值為0&#xff1b; 結論&#xff1a;無…

【VB語言】EXCEL中VB宏的應用

【VB語言】EXCEL中VB宏的應用 文章目錄 [TOC](文章目錄) 前言一、EXCEL-VB1.實驗過程2.代碼 二、EXCEL-VB 生成.c.h文件1.實驗過程2.代碼 四、參考資料總結 前言 1.WPS-VB擴展包 提示&#xff1a;以下是本篇文章正文內容&#xff0c;下面案例可供參考 一、EXCEL-VB 1.實驗過…

用deepseek學大模型05邏輯回歸

deepseek.com:邏輯回歸的目標函數&#xff0c;損失函數&#xff0c;梯度下降 標量和矩陣形式的數學推導&#xff0c;pytorch真實能跑的代碼案例以及模型,數據&#xff0c;預測結果的可視化展示&#xff0c; 模型應用場景和優缺點&#xff0c;及如何改進解決及改進方法數據推導。…

2025年02月17日Github流行趨勢

項目名稱&#xff1a;OmniParser 項目地址url&#xff1a;https://github.com/microsoft/OmniParser 項目語言&#xff1a;Jupyter Notebook 歷史star數&#xff1a;8971 今日star數&#xff1a;969 項目維護者&#xff1a;yadong-lu, ThomasDh-C, aliencaocao, nmstoker, kris…

RocketMQ 5.0安裝部署

0.前言 在微服務架構逐漸成為主流的今天&#xff0c;消息隊列如同數字世界的快遞員&#xff0c;承擔著系統間高效通信的重要使命。 Apache RocketMQ 自誕生以來&#xff0c;因其架構簡單、業務功能豐富、具備極強可擴展性等特點被眾多企業開發者以及云廠商廣泛采用。歷經十余…

Ubuntu 22.04.5 LTS 安裝企業微信,(2025-02-17安裝可行)

一、依賴包(Ubuntu 20.04/Debian 11) 點擊下載https://www.spark-app.store/download_dependencies_latest 1、 下載最新的依賴包。 請訪問星火應用商店依賴包下載頁面, 下載最新的依賴包。2、解壓依賴包 </

如何使用 HPjtune 分析 Java GC 日志并優化 JVM 性能

HPjtune 是一款用于分析 Java 應用程序垃圾回收&#xff08;GC&#xff09;日志的工具&#xff0c;主要用于優化 JVM 性能。雖然 HPjtune 本身并不直接生成 HTML 格式的報告&#xff0c;但可以通過結合其他工具或方法將分析結果導出為 HTML 格式。以下是實現這一目標的步驟和方…