CCF CSP201903-2二十四点

题目描述

要点分析

此题是典型的中缀表达式的求解问题, 可以采用堆栈求解.

具体计算思路:

  • 使用两个栈, num用于存储操作数, opt用于存储操作符
  • 从左往右扫描表达式, 遇到操纵数则入栈
  • 遇到操作符时如果opt非空且其优先级低于或等于栈顶操作符优先级, 则从num弹出两个操作数进行计算(需要注意弹出操作数的顺序和计算的顺序(+,x是无序的而-,/是有序的))
#include<bits/stdc++.h>
using namespace std;
int get_priority(char c1)
{if(c1=='x'||c1=='/')return 2;else if(c1=='+'||c1=='-')return 1;else return 0;
}
int main()
{int n;cin>>n;while(n--){int ans=0;stack<int>num;stack<int>opt;//不能用char,否则会溢出 string s;cin>>s;num.push(s[0]-'0');opt.push(s[1]);for(int i=2;i<s.size();i++){if(get_priority(s[i])==0) num.push(s[i]-'0');else {while(!opt.empty()&&get_priority(s[i])<=get_priority(opt.top())) {int tmp1=0;tmp1=num.top();num.pop();if(opt.top()=='x')     tmp1=tmp1*num.top();else if(opt.top()=='/')    tmp1=num.top()/tmp1;//操作数有前后顺序else if(opt.top()=='+') tmp1=tmp1+num.top();else if(opt.top()=='-')   tmp1=num.top()-tmp1;//操作数有前后顺序num.pop();num.push(tmp1);opt.pop();}opt.push(s[i]);}}while(!opt.empty()) {int tmp1=0;tmp1=num.top();num.pop();if(opt.top()=='x')       tmp1=tmp1*num.top();else if(opt.top()=='/')    tmp1=num.top()/tmp1;//操作数有前后顺序else if(opt.top()=='+') tmp1=tmp1+num.top();else if(opt.top()=='-')   tmp1=num.top()-tmp1;//操作数有前后顺序num.pop();num.push(tmp1);opt.pop();}if(num.top()==24) cout<<"Yes"<<endl;else cout<<"No"<<endl;}
}

CCF CSP201903-2二十四点相关推荐

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

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

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

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

  3. 【CCF 201903-2】 二十四点(符号栈)

    写在前面 本题的常规做法是使用符号栈,特殊解法是使用Python的eval函数. 算法思想 将中缀表达式转化为后缀表达式,使用符号栈和数字栈. 当新的符号op入栈时,有两种情况: ① op的优先级 & ...

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

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

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

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

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

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

  7. CCF-CSP 201903-2 二十四点(python实现)

    题源来自---CCF计算机职业资格认证官网,点击报名入口,可进行模拟考试进行练习.代码在最后. 代码 应用eval函数 eval:将传入的字符串当成有效的表达式来求值并返回计算结果. n=int(in ...

  8. 从LeetCode 679. 24 Game--C++ 解法--二十四点 到穷举24点所有可能性-24点大全

    从LeetCode 679. 24 Game–C++ 解法–二十四点 到穷举24点所有可能性 此文首发于我的个人博客:zhang0peter的个人博客 LeetCode题解文章分类:LeetCode题 ...

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

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

最新文章

  1. Matlab编程与数据类型 -- 字符型数组
  2. 被业务方投诉了!CTO直摇头:人际关系处理太差,不懂维护“情感账户”
  3. 2021-1-17 随笔
  4. 原来deepin部署环境还是那么简单(只不过要用root权限)
  5. html下纯JS实现图片压缩、预览、图片Base64转换
  6. linux sysctl重启服务,Linux /etc/sysctl.conf重启没有生效
  7. cmake教程(为什么要用cmake?)(cmake编译opencv)(就是个跨平台的编译工具Linux、windows)(很重要,必须得学)(报错解决方案)opencv编译
  8. 【渝粤教育】国家开放大学2018年秋季 0107-21T现代货币金融学 参考试题
  9. hadoop-0.21.0-eclipse-plugin无法在eclipse中运行解决方案
  10. Java构造方法的继承调用
  11. java nio 多路复用_8分钟深入浅出搞懂BIO、NIO、AIO
  12. HTML5动画软件工具编辑器 HTML5动画分类 工具推荐
  13. 基于互信息的特征选择算法MATLAB实现
  14. gtk窗口和标签控件范例代码
  15. Codeforces 36B - Fractal
  16. 如何确定论文研究方向,看了很多论文还是没有头绪?
  17. web前端开发基础知识整理以及前端视频教程
  18. 在python中输入圆的半_极客起源 - geekori.com - 问题详情 - python动态圆更新糅合到地图显示里...
  19. SQL语句按照姓名首字母排序
  20. 自动化控制行业常见面试问题分析

热门文章

  1. 101个MySQL调试和优化技巧
  2. .NET请求编译流程图(解释为什么第一次请求比较慢)
  3. Linux中的进程调度(六)
  4. 基于winpcap的网络数据包的捕获与分析
  5. mysql索引与事务笔记_《MySQL技术内幕:InnoDB存储引擎》读书笔记五-锁、索引及事务...
  6. Spring-发送QQ邮件
  7. bootstrap pagewrapper_BootStrap table服务端分页
  8. matlab中round函数_Excel中round函数的使用方法
  9. 网络编程学习2-套接字编程简介
  10. 第一阶段意见汇总以及改进