nyoj ACM:前缀式计算( 堆栈的使用 或 递归 )

ACM中常用算法----字符串 ACM中常用算法—-字符串ACM中常用的字符串算法不多,主要有以下几种: Hash 字典树 KMP AC自动机 manacher 后缀数组 EX_KMP SAM(后缀自动机) 回文串自动机 下面来分别介绍一下:0. Hash字符串的hash是最简单也最常用的算法,通过某种hash函数将不同的字符串分别对应到不同的数字.进而配合其他数据结构或STL可以做到判重,统计,查询等操作. #### 字符串的h 阅读详情
                    前缀式计算
                    时间限制:1000 ms  |  内存限制:65535 KB
                    难度:3

                        描述

先说明一下什么是中缀式:

如2+(3+4)*5这种我们最常见的式子就是中缀式。

而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))

然后把运算符写到括号前面就是+(2 *( +(3 4) 5) )

把括号去掉就是:+ 2 * + 3 4 5

最后这个式子就是该表达式的前缀表示。

给你一个前缀表达式,请你计算出该前缀式的值。

比如:

  • 2 * + 3 4 5的值就是 37

                                              输入
    

    有多组测试数据,每组测试数据占一行,任意两个操作符之间,任意两个操作数之间,操作数与操作符之间都有一个空格。输入的两个操作数可能是小数,数据保证输入的数都是正数,并且都小于10,操作数数目不超过500。
    以EOF为输入结束的标志。
    输出
    对每组数据,输出该前缀表达式的值。输出结果保留两位小数。
    样例输入

  • 2 * + 3 4 5
  • 5.1 / 3 7
    样例输出
    37.00
    5.53

感悟:但凡遇到表达式的问题,首先要想到使用堆栈来处理。

我的思路是用两个堆栈实现的,但是看了网上大神的代码,好像用递归实现更加NB。
我的思路:
1. 用数组s接受前缀表达式,连同空格一起接收。
2. 然后将s全部压入堆栈A中
3. 每次从堆栈A中取出一个字符x。

  • 如果是数字,那么就看A的下一个字符y是数字还是小数点还是空格。
    • 如果y是空格,直接将x压入B中;
    • 如果y是小数点,那么再取小数点下一个数,三者合并就得到完整的小数,然后压入B中;
    • 如果y 是数字,那么表明x和y同为某一小数的小数部分,且y是x的前一位,那么不断循环,直到找到小数点,再加上小数点后面的数字,3者合并,就得到一个完整的小数,然后压入堆栈B中
  • 如果是空格,忽略掉即可。
  • 如果是x运算符,那么M= B.POP() , N= B.POP() , 然后M,X,N运算,将结果压入B中

4。上面不断循环,直到堆栈A为空

#include<iostream>
#include<cstdio>
#include<stack>
#include<cstring>

using namespace std;
int main()
{
    stack<char> A;
    stack<double> B;
    char s[2010];
    while(gets(s))
    {
        for(int i=0;i<strlen(s);i++)
        {
            A.push(s[i]);
        }

        while(!A.empty())
        {
            char x=A.top();
            double f;
            A.pop();
            if(x>='0' && x<='9')//如果是数值,那么A一定不为空 
            {
                char y=A.top();
                if(y>='0' && y<='9')
                {
                    f=x-'0';
                    while(y!='.')
                    {
                        A.pop();
                        f=(y-'0')+f*0.1 ;
                        y=A.top();
                    }

                    A.pop();
                    y=A.top();
                    A.pop();
                    f=(y-'0')+f*0.1;
                    B.push(f);
                }
                else if(y=='.')
                    {   
                        A.pop();
                        y=A.top();
                        A.pop();
                        B.push((y-'0')+(x-'0')*0.1);
                    }
                    else
                    {
                        B.push(x-'0');
                    }

            } 
            else if(x==' ')
            {
                continue;
            }
            else if(x=='+' || x=='-' || x=='*' || x=='/')
                  {
                    double l=B.top();
                    B.pop();
                    double r=B.top();
                    B.pop();
                    switch(x)
                    {
                        case '+': B.push(l+r);break;
                        case '-': B.push(l-r);break;
                        case '*': B.push(l*r);break;
                        case '/': B.push(l/r);break;
                    }
                  }     
        }

        printf("%0.2lf\n",B.top());
        B.pop();

    }
    return 0;
}

大神的递归代码:
可惜不是很懂。


#include<iostream>
#include<cstdio>
#include<cstring>
#include<sstream>
using namespace std;
stringstream ss;
double value;
char ch;
double val()
{
    ss>>ch;
    switch(ch)
    {
    case '+':return val()+val();
    case '-':return val()-val();
    case '*':return val()*val();
    case '/':return val()/val();
    default:ss.unget();ss>>value;return value;
    }
}

int main()
{
    string str;
    while(getline(cin,str))
    {
        ss.clear();
        ss<<str;
        printf("%.2f\n",val());
    }
}        
本地AI代码助手:智能解析大型代码库,实现自动化重构与理解 在软件开发中,大型代码库的理解与维护是常见挑战。传统方法依赖人工阅读和有限上下文工具,效率低下。通过结合检索增强生成(RAG)和多智能体(Multi-Agent)架构,现代AI工具能够智能解析代码结构,理解模块关系,并精准定位相关代码片段。这种技术不仅能提升代码探索效率,还能自动化执行重构、文档生成等任务,在遗留系统维护、快速上手新项目等场景中发挥关键作用。本文以blackboxaicode/cli为例,展示了如何利用其代码感知和Workflow Automation能力,高效处理复杂代码库。 阅读详情

相关推荐

GSview5.0安装步骤及问题

GSview5.0安装步骤及问题安装步骤遇到的问题 尝试过很多对图片去白边的方法,感觉最好用最有效的还是用GSview比较好操作。本文针对gsview安装及安装过程中踩过的坑记录下来。 安装步骤 在官网下载gsv50w64.exe(或32位的),直接双击安装即可。 安装Ghostscript;注意:GSview5.0不支持最新版的Ghostscript9.54,这里用到是9.27的版本可以在Github中找到,下载gs927w64.exe,一定要安装在GSview的安装目录Ghostgum下 Gho

LilianLYN的博客 1万+

前缀式计算 ACM 数据结构

原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=128 原题描述:                 先说明一下什么是中缀式:      如2+(3+4)*5这种我们最常见的式子就是中缀式。      而把中缀式按运算顺序加上括号就是:(2+((3+4)*5))      然后把运算符写到括号前面就是+(2 *( +(3 4)

于沛杰的博客 459

时钟MUX电路结构的时序约束方法分析

一、最简单的设置 对于时钟MUX而言,其output_pin上的时钟在任一时刻一定唯一。可以使用如下命令: set_clock_exclusivity -output output_pin [-type mux | user_defined] ...

Jackiezhang1993的博客 1万+

南阳oj 前缀式计算 题目218

给大家推荐个靠谱的公众号程序员探索之路,大家一起加油 #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;string.h&gt; #include&lt;stack&gt; #define N 1000 using namespace std; char s[N],b[3]; stack&lt;double&gt;nu...

yueloveme的博客 756

保姆级!n8n 公众号自动化:从 0 搭 “写文案 + 生图 + 发草稿” 全流程

【摘要】本文介绍如何利用n8n搭建全自动公众号内容发布流程,涵盖AI文案生成、封面图制作到自动发布的全链路解决方案。通过对接OpenRouter大模型、阿里云百炼生图API及微信官方接口,实现从内容创作到发布的自动化。重点包括:1)n8n微信节点安装配置;2)大模型API授权与提示词优化技巧;3)图片生成与格式转换处理;4)公众号接口授权注意事项;5)草稿自动生成参数设置要点。特别提醒首次配置时需关闭自动发布功能以检查效果,避免格式错误导致发布失败。该方案无需复杂编程,适合运营人员快速搭建自动化内容生产流程

Jacket0603的博客 1594

十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

冒泡排序、选择排序、插入排序、快速排序、希尔排序

HK的博客 18万+

南阳理工OJ_题目128 前缀式计算

//从后往前算 #include #include #include using namespace std; void push_a(double& num); void pop_a(double& num); void push_op(char& c); void pop_op(char& c); double fun(double a, double b, char c); ch

心中有道的专栏 779

STM32F103跑LVGL,用DMA加速刷屏,800*480大屏也能丝滑

本文详细介绍了如何在STM32F103芯片上通过DMA加速和内存优化,实现800*480大屏的LVGL流畅运行。通过FSMC+DMA硬件架构优化、双缓冲机制和LVGL参数调优,显著提升了界面刷新率和响应速度,适用于嵌入式GUI开发中的高性能需求场景。

weixin_30357231的博客 376

前缀式计算-OJ

前缀式计算 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式。 而把中缀式按运算顺序加上括号就是:(2+((3+4)*5)) 然后把运算符写到括号前面就是+(2 *( +(3 4) 5) ) 把括号去掉就是:+ 2 * + 3 4 5

wang_fu_grong_16的博客 441

【SAP HANA 24】HANA与Oracle SQL语法对照表

HANA SQL参考及Oracle 语法对照

探索 Java 编程的技巧、最佳实践和解决方案。本博客提供针对 Java 开发者的实用指南,涵盖从基础到高级话题,旨在提升编程效率和技能。 1424

小黄鸭机器人技术全解-第 07 章 关节自由度与行程参数

—鸭子歪着头转头时,转的平面是斜的,这正是它"灵动"感的来源。仿真里这是自动的(轴定义在父刚体系),复刻时不需要做任何事——

yolo模型训练找我,AI游戏合作找我 67

ACM:栈和队列的应用

题目:字符匹配问题 现在,有一行括号序列,请你检查这行括号是否配对。 输入:第一行输入一个数N(0<N<=100),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个字符串S(S的长度小于10000,且S不是空串),测试数据组数少于5组。数据保证S中只含有"[", “]”, “(”, “)” 四种字符 输出:每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,...

qq_44238714的博客 402

AI应用架构师实战:超算中AI与量子计算融合的初探与架构

当大模型的算力需求突破E级超算的极限,当量子计算的“量子优势”从实验室走向真实场景,超算+AI+量子计算的融合架构成为解决复杂问题的关键路径。本文从架构师的实战视角出发,系统拆解三者融合的底层逻辑:从“计算本质”的第一性原理推导,到“量子-经典异构”的架构设计;从“量子机器学习”的代码实现,到“金融/医药”的场景落地。我们将回答:如何用超算支撑量子计算的噪声抑制与纠错?如何用量子计算加速AI模型的训练与推理?如何设计可扩展、高可用的融合系统?最终给出架构师的实战指南——从技术选型到运营管理的全流程方法论。

AIGC应用创新大全的博客 924

杭电ACM1022(栈的使用)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1022 题目大意:有若干列火车按一定顺序进站,再按一定顺序出站,这个过程遵循“先进后出”的原则,因此这个车站其实就是一个栈的数据结构,要求给出一个进站的序列和一个出站的序列,如果按照给定的进站顺序可以得到给定的出站顺序,则输出“Yes.”。并按顺序输出每一列列车进出的顺序,若不能得到则输出“No.

Tworld 2778

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

nyoj-----前缀式计算

前缀式计算 时间限制:1000 ms  |           内存限制:65535 KB 难度:3   描述 先说明一下什么是中缀式: 如2+(3+4)*5这种我们最常见的式子就是中缀式。 而把中缀式按运算顺序加上括号就是:(2+((3+4)*5)) 然后把运算符写到括号前面就是+(2 *( +(3 4) 5) ) 把括号去掉就是:+ 2 * + 3 4 5 最后这个式子就是...

weixin_33852020的博客 205

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

NYOJ128 前缀式计算(栈的运用)

题目信息: http://acm.nyist.net/JudgeOnline/problem.php?pid=128 + 2 * + 3 4 5的值就是 37,详见输入输出。 输入有多组测试数据,每组测试数据占一行,任意两个操作符之间,任意两个操作数之间,操作数与操作符之间都有一个空格。输入的两个操作数可能是小数,数据保证输入的数都是正数,并且都小于10,操作数数目不超过500。 以E

机器笨猫 907

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

蓝桥杯:前缀表达式

题目: 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。   输入格式:输入只有一行,即一个前缀表达式字符串。   输出格式:输出相应的计算结果(如

知足~的博客 1699

浅谈ACM中前缀和的应用

1 牛客小白月赛5 https://www.nowcoder.com/acm/contest/135/I Apojacsleam喜欢数组。 他现在有一个n个元素的数组a,而他要对a[L]-a[R]进行M次操作: 操作一:将a[L]-a[R]内的元素都加上P 操作二:将a[L]-a[R]内的元素都减去P 最后询问a[l]-a[r]内...

axuhongbo的博客 1378

栈的应用——表达式求和

#include #include #include #include using namespace std; //符号数组 char symbol[7] = {'+', '-', '*', '/', '(', ')', '#'}; //栈内元素的优先级 int in[7] = {3, 3, 5, 5, 1, 6, 0}; //栈外元素的优先级 int out[7] = {2, 2,

ACM,再见! 1845

2018-7-13 ACM 专项刷题 栈 + 队列 + 树状数组

写的有些久,拖到7-14号凌晨才写完,因为我自己也在慢慢理解中,还是要多做题,做的题越多,理解越深刻。 1. 栈: stack是一种先进入的元素后弹出的数据结构。 有一种常见的栈的应用就是检查括号匹配与否。 对应题目及题解链接:https://blog.youkuaiyun.com/ericgipsy/article/details/79980874 2.队列与优先队列:     &lt;队列&g...

FrozenAllen的博客 861

前缀和与差分总结

前缀和总结 前缀和适用题型 ——常用于解决需要频繁地对某一段或几段区间的信息进行查询或计算的问题。但是不适用于区间值的修改。——常用于解决需要频繁地对某一段或几段区间的信息进行查询或计算的问题。\\但是不适用于区间值的修改。——常用于解决需要频繁地对某一段或几段区间的信息进行查询或计算的问题。但是不适用于区间值的修改。 前缀和分类 ①、一维前缀和:原数组a1,a2,a3,...,an,前缀和数组s...

njuptACMcxk的博客 427

hduacm 5480 Conturbatio前缀和

题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5480这道题其实如果理解了题目还是蛮简单的,ac也不难,不过博主一开始没理解好题目,超时worry answer不断。 先分析一下题目,如果某个区域可以完全被打到,那么需要的是什么呢?仅仅只需要在x轴或y轴上布满坦克就好了,任意满足一个就可以,可是楼主在正确理解这以后开始写代码居然超时了,应为我是每输入

loiecarsers的博客 1636

算法训练 前缀表达式

http://lx.lanqiao.org/problem.page?gpid=T225 算法训练 前缀表达式 时间限制:1.0s 内存限制:512.0MB 问题描述   编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法)...

weixin_30296405的博客 511

NYOJ128前缀式的计算递归求解当时…

题目地址 #include #include char str[100000]; int i=0; double count1() {     double sum;     int n;     switch(str[i])     {         case '+':i++;return count1()+count1();         case '-':i++;return coun

追梦的Anker 704

ACM算法-栈

经过深思熟虑,小周我想去打ACM,大学生国际程序设计比赛,可是奈何个人实力实在不行,算法这一块实在薄弱,我就想从零开始学习算法,如果有同学想一起学习的可以点下关注,让我们一起去学习。 今天我学到的内容是 数据结构--->栈 原理: 栈:又名堆栈,是一种运算受限制的线性表,限制是:仅仅允许从表的一段插入和删除运算。这一段称为栈顶,把另一端称为栈底。向一个栈插入新元素又称...

周修涵的博客 487

NYOJ-ACM-分数加减法

描述 编写一个C程序,实现两个分数的加减法 输入输入包含多行数据  每行数据是一个字符串,格式是"a/boc/d"。  其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。  数据以EOF结束  输入数据保证合法 输出对于输入数据的每一行输出两个分数的运算结果。  注意结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数 样例

lalalalalala_的博客 685
上一篇: nyoj ACM:士兵杀敌(五)(数组的巧妙运用)
下一篇: nyoj ACM:表达式求值 (堆栈)
丁磊_Ml
博客等级 码龄11年 95粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值