写在前面

本题的常规做法是使用符号栈,特殊解法是使用Python的eval函数。

算法思想

将中缀表达式转化为后缀表达式,使用符号栈数字栈

当新的符号op入栈时,有两种情况:

① op的优先级 > 符号栈栈顶符号的优先级:直接入栈

② op的优先级 ≤ 符号栈栈顶符号的优先级:

不断地将符号栈的元素弹出至数字栈,直到op的优先级 > 符号栈栈顶符号的优先级。

此时再将op入栈。

当表达式遍历完成时,将符号栈剩余的符号依次弹出到数字栈,最终数字栈中的元素就是运算的结果。

C++11满分代码

#include <iostream>
#include <stack>
using namespace std;stack<int> nums;    // 数字栈
stack<char> ops;    // 符号栈/* 获取符号的优先级 */
int priority(char op)
{if(op == '+' || op == '-') return 1;return 2;
}/* 计算 a op b 的值 */
int calculate(char op, int a, int b)
{if(op == '+') return a + b;if(op == '-') return a - b;if(op == 'x') return a * b;return a / b;
}int main()
{// 关闭同步ios::sync_with_stdio(false);int n;cin >> n;cin.get();while (n--){string expr;getline(cin, expr);for (size_t i = 0; i < expr.length(); ++i){if (i & 1) // 符号压入符号栈{// 若op的优先级更高if(ops.empty() || priority(ops.top()) < priority(expr[i]))ops.push(expr[i]);else{// 不断地弹出ops,直到op的优先级更高while(!ops.empty() && priority(ops.top()) >= priority(expr[i])){// ops弹出符号,数字栈弹出2个数字;它们的运算结果压入数字栈int b = nums.top();nums.pop();int a = nums.top();nums.top() = calculate(ops.top(), a, b);ops.pop();}ops.push(expr[i]);  // 将op压入符号栈}}else nums.push(expr[i] - '0');    // 数字直接压入数字栈}// 弹出剩余的符号while(!ops.empty()){int b = nums.top();nums.pop();int a = nums.top();nums.top() = calculate(ops.top(), a, b);ops.pop();}// cout << nums.top() << "\n";cout << (nums.top() == 24 ? "Yes" : "No") << "\n";nums.pop();}
}

如果对您有帮助,记得点个赞哦~

【CCF 201903-2】 二十四点(符号栈)相关推荐

  1. CCF 201903-2 二十四点 用栈模拟简单计算器

    二十四点 来源:CCF 背景 二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24. 题目 定义每一个游戏由 4 个从 1-9 的数字和 3 个四 ...

  2. CSP CCF: 201903-2 二十四点 (C++)

    目录 题目来源 碎碎念 代码 题目来源 二十四点 碎碎念 加号.减号是同一层 乘法.除法是同一层 优先执行乘除 代码 #include <iostream> #include <fs ...

  3. 【CCF】201903-2 二十四点

    这道题我每次写都都会犯一些细节性的错误,然后最后调试的时候真的是怎么都找不出来!然后跟朋友说,让朋友帮忙找,结果朋友一眼看出来!所以,发现代码哪有有错的时候,当排除完你觉得会出错的地方以后,一定要再去 ...

  4. CCF-CSP 201903-2 二十四点 Python语言 模拟栈实现

    项目场景: 二十四点问题本质是处理表达式,一提到处理表达式第一反应大概就是使用栈来处理,虽然网上大部分使用python语言处理二十四点问题都是利用强大的eval()函数,但我仍然想要使用python的 ...

  5. CCF CSP201903-2二十四点

    CCF CSP201903-2二十四点 题目描述 要点分析 此题是典型的中缀表达式的求解问题, 可以采用堆栈求解. 具体计算思路: 使用两个栈, num用于存储操作数, opt用于存储操作符 从左往右 ...

  6. C语言 解决CCF 二十四点问题

    利用 C 语言 解决 CCF题库中的二十四点问题 特别致谢:原博主程序 编译环境: IDE:DEV-C++ 语言:C语言 CCF CSP官方往年题库链接点我进入 1. 题目如下: 解题思路: 此题难点 ...

  7. 201903-2二十四点[20201213封笔题目]没写呢

    2020.12.13 csp今天就考试完了,我用了三天的时间,倒着刷完了所有的第一题,正着刷第二题,就到了这里.暂时结束吧. 哎,发现现在的考试越来越难了. 今天的考试连第二个体都过不了. 我死了. ...

  8. 「csp模拟试题 201903-2」二十四点 C/C++ 100分

    目录 题目 输入输出样例 题解思路 题解源码(c/c++) 题目 :二十四点 [问题描述] 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号 ...

  9. csp试题2:二十四点

    csp试题2:二十四点 题目 分析 代码 总结 题目 问题描述       二十四点是一款著名的纸牌游戏,其游戏的目标是使用3个加减乘除运算使得4张纸牌上数字的运算结果为24.       定义每一个 ...

最新文章

  1. WEBAPI 帖子收藏
  2. ASP.NET列表信息以Excel形式导出
  3. CTF-Web-基础知识点汇总
  4. python求平方根的代码_Python求解平方根的方法
  5. android rfid 读写sdk,Android-SDK-1.0.0-STD android手机调用RFID模块读取电子标签Demo - 下载 - 搜珍网...
  6. ActiveMQ网络连接器
  7. python 类 对象 知乎_python基础知识:类,对象,模块三者的区别
  8. 去哪儿-13-city-vuex
  9. 英特尔回应安全漏洞问题:已在硬件层面解决
  10. 八、IO优化(7)减少IO竞争
  11. Linux chmod 命令 设置权限
  12. 小福利,PMP考试真题刷起来,人人都当项目管理大师!
  13. 【图像去噪】基于高斯滤波、均值滤波、中值滤波、双边滤波四种滤波实现椒盐噪声图像去噪附matlab代码
  14. 用Python告诉你深圳房租有多高,做程序员真的能买得起嘛
  15. 新年第一天 | 恶补新一季《黑镜》的同时,营长又深入扒了扒它那擅长机器学习的新爸爸是如何赚钱的
  16. 袁腾飞老师的幽默历史课
  17. SpringMVC 通过Map、Model和ModelMap向页面传值
  18. 拷机测试需要多久_自学找到一份初级软件测试的工作需要会什么和要多久?
  19. 计算机未来发展报告,2020-2026年中国电子计算机行业发展深度调研与未来趋势报告...
  20. 2021贵港市地区高考成绩排名查询,贵港高中成绩排名2021,贵港中考分数线排行榜...

热门文章

  1. 干货!学习 Python 看这篇管够!!!
  2. Codeforces Round #800 (Div. 2) E. Keshi in Search of AmShZ
  3. JAVA I/O之神奇的RandomAccessFile(快速定位文件任意位置,修改或插入)
  4. 阅读文档时遇到的英文单词 -Words in Documents
  5. Wifi密码破解实战
  6. Unity随记(一) LookAt和LookRotation的使用
  7. mx450和gtx1050ti哪个好
  8. 网易滑块识别-通用滑块识别
  9. MATLAB学习——低通滤波(频域滤波(一))
  10. SG函数SG定理游戏的和公平组合游戏