栈的模拟应用:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cstdlib>
#include<algorithm>
#include<stack>
using namespace std;string getPostfixExp(string s)
{stack<char> sta;// d n xstring exp; int len = s.size();for(int i=0; i<len; i++){char ch = s[i]; if(ch == 'a' || ch == 'm') { //如果是字母i += 2; sta.push(s[i]);} else if(ch == '('){sta.push(ch);} else if(ch == ')'){//此时顶一定是( sta.pop();//弹走( exp += " ";exp += sta.top();sta.pop();} else if(ch != ','){ //数字 string num; while(s[i] >= '0' && s[i] <= '9'){num += s[i++];} if(exp[0] != NULL)//后缀表达式的第一个一定是数字,用此来避免首位空格 exp += " "; exp += num;i--;} }return exp;
}int calculate(string post)
{stack<int>sta;int len = post.size();for(int i=0; i<len; i++){int ch = post[i];if(ch >= 'a') {//如果是运算符 int a = sta.top(); sta.pop();int b = sta.top(); sta.pop();if(ch == 'd')sta.push(a+b);else if(ch == 'x')sta.push(max(a, b));else if(ch == 'n')sta.push(min(a, b)); } else if(ch != ' ') {//如果为数字 int num = 0;while(post[i] >= '0' && post[i] <= '9')num = num*10+post[i++]-'0';sta.push(num);i--;} } return sta.top();
}
int main()
{freopen("d:\\in.txt", "r", stdin); string s;int t;cin>>t;while(t--) {cin>>s;string post = getPostfixExp(s);cout<<calculate(post)<<endl; }return 0;
}

转载于:https://www.cnblogs.com/huwtylv/p/4385306.html

[河南省ACM省赛-第四届] 表达式求值(nyoj 305)相关推荐

  1. [河南省ACM省赛-第三届] AMAZING AUCTION (nyoj 251)

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=251 规则: 1.若某竞标价唯一,则胜出 2.若不存在唯一竞标价,则投标次数最少竞标价中标 ...

  2. c语言求不定式的最大值,C语言之四则运算表达式求值(链栈)—支持浮点型数据,负数, 整型数据运算...

    运算符间的优先级关系: 链栈结构体定义: 数据域使用字符串长度为20的字符数组(故需要注意判断读取的字符串是运算符还是数值) 可支持浮点型数据,负数, 整型数据的运算 float EvaluateEx ...

  3. 【ACM】nyoj_305_表达式求值_201308081018

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:3 描述 Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(2 ...

  4. NYOJ 1272:表达式求值(2016河南省ACM-A)

    表达式求值 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表达式,则 X+ ...

  5. 第九届河南省程序设计大赛 A 表达式求值

    题目描述: 假设表达式定义为: 1. 一个十进制的正整数 X 是一个表达式. 2. 如果 X 和 Y 是 表达式,则 X+Y, X*Y 也是表达式; *优先级高于+. 3. 如果 X 和 Y 是 表达 ...

  6. NYOJ 35 表达式求值

    表达式求值 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能 ...

  7. NYOJ 35表达式求值

    表达式求值 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 ACM队的mdd想做一个计算器,但是,他要做的不仅仅是一计算一个A+B的计算器,他想实现随便输入一个表达式都能求出 ...

  8. 经典笔试上机考题-表达式求值

    相信参加过笔试面试同学应当见到过表达式求值这道题,下面列举的一道经典的考题,本文将同大家一起细细探讨一下表达式求值这一类问题的求法,希望抛砖引玉,其中有不妥的地方也请大家多多批评指正. /* 功能:四 ...

  9. NOIP2013普及组 T2 表达式求值

    OJ地址:洛谷P1981 CODEVS 3292 正常写法是用栈 1 #include<iostream> 2 #include<algorithm> 3 #include&l ...

最新文章

  1. 第一次使用Android Studio时你应该知道的一切配置(三):gradle项目构建
  2. unity人物刚体移动_Unity 刚体移动,自方向移动
  3. I.MX6 Android CAN 命令行测试
  4. 腾讯云mysql架构_一个数据库存储架构的独白
  5. 6月14号=》136页-145页
  6. csv可以保存特殊字符_浅谈CSV注入漏洞
  7. 华医网自动答题小脚本软件,并收集答案保存起来
  8. 当电脑接双屏扩展显示器时,系统崩溃,QQ浏览器出现显示异常,通过如下方法使之正常
  9. 介质天线的设计原理_以水为媒介的介质天线的制作方法
  10. 良心安利三大游戏音效素材网站
  11. 原生android ui设计,在拟物和扁平之间寻找平衡 原生安卓UI设计进化史
  12. 【DM642】ICELL Interface—Cells as Algorithm Containers
  13. mipi的dsi全称_MIPI-DSI/CSI协议介绍-转载
  14. 华为怎么显示返回按键_你见过这台会跑的“华为手机”吗?深度体验极星Polestar 2车机系统...
  15. 极速办公Word文档的查找和替换功能键在哪?
  16. 【1044】判断是否为两位数
  17. 天下文章一大抄 mysql远程连接
  18. Java语言GUI实现计算器
  19. 品质网络的迭变之路,以及运营商的未来之匙
  20. 哈工大软件构造lab3

热门文章

  1. 哈佛医学院研究员解读DeepMind大突破AlphaFold:有进步,但未解决根本问题
  2. “深度学习已死,可微编程万岁!”LeCun老师为何又语出惊人?
  3. 给模型添加ORM,与持久化记录
  4. 分享 :用五个趣味案例教你数据分析的基本思想
  5. EL表达式、 jstl标签
  6. RPC远程过程调用概念及实现
  7. 使用开源库 Objective-C RegEx Categories 处理正则表达式
  8. Groovy操纵集合秘籍
  9. 四、物理优化(6)数据库引擎优化顾问
  10. tab和TabHost