二十四点

来源:CCF

标签:

参考资料:

相似题目:

背景

二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24。

题目

定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。其中加法用符号 + 表示,减法用符号 - 表示,乘法用小写字母 x 表示,除法用符号 / 表示。在游戏里除法为整除,例如 2 / 3 = 0,3 / 2 = 1, 4 / 2 = 2。
老师给了你 n 个游戏的解,请你编写程序验证每个游戏的结果是否为 24 。

输入

从标准输入读入数据。第一行输入一个整数 n,从第 2 行开始到第 n + 1 行中,每一行包含一个长度为 7的字符串,为上述的 24 点游戏,保证数据格式合法。

输出

输出到标准输出。
包含 n 行,对于每一个游戏,如果其结果为 24 则输出字符串 Yes,否则输出字符串 No。

输入样例

10
9+3+4x3
5+4x5x5
7-9-9+8
5x6/5x4
3+5+7+9
1x1+9-9
1x9-5/9
8/5+6x9
6x7-3x6
6x4+4/5

输出样例

Yes
No
No
Yes
Yes
No
No
No
Yes
Yes

样例解释

9+3+4 × 3 = 24
5+4 × 5 × 5 = 105
7 − 9 − 9+8= −3
5 × 6/5 × 4 = 24
3 + 5 + 7 + 9 = 24
1 × 1+9 − 9=1
1 × 9 − 5/9 = 9
8/5 + 6 × 9 = 55
6 × 7 − 3 × 6 = 24
6 × 4 + 4/5 = 24

提示

解题思路

表达式中只含有+、-、x、/四种运算,我们可以简单地用栈来计算它的值。过程是这样的,顺序遍历表达式,如果遇到的是数字,压入数字栈,如果遇到的是符号,压入符号栈。注意,由于x、/的优先级较高,所以当遇到乘法和除法时,直接计算结果,并把结果压入数字栈。还由于,减法的结合性是从左向右的,所以我们做一个简单地转换,将所有的减法变为加法。最后数字栈中的数就是结果了。
此外,本道题还可以构造表达式树。

参考代码

#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;int n;
char str[10];stack<int> num;
stack<char> sign; int main(){scanf("%d",&n);getchar(); //读取留在缓冲区的换行符for(int i=0;i<n;i++){gets(str);while(!num.empty()) num.pop(); //清空栈while(!sign.empty()) sign.pop();int j=0;while(j<strlen(str)){if(str[j]>'0' && str[j]<='9'){num.push(str[j]-'0');} else{if(str[j]=='+'){sign.push('+');}else if(str[j]=='-'){ //将减法转换成加法 num.push((str[j+1]-'0')*(-1));sign.push('+');j++;}else if(str[j]=='x'){ //直接计算乘法 int lhs=num.top();num.pop();num.push(lhs*(str[j+1]-'0'));j++;}else if(str[j]=='/'){ //直接计算除法 int lhs=num.top();num.pop();num.push(lhs/(str[j+1]-'0'));j++;}}j++;}while(!sign.empty()){ //计算剩余的加法 int rhs=num.top();num.pop();int lhs=num.top();num.pop();sign.pop();num.push(lhs+rhs);}int ans=num.top();if(ans==24) printf("Yes\n");else printf("No\n");}return 0;
}

CCF计算机软件能力认证试题练习:201903-2 二十四点相关推荐

  1. CCF计算机软件能力认证试题练习:201903-1 小中大

    小中大 来源:CCF 标签: 参考资料: 相似题目: 背景 在数据分析中,最小值最大值以及中位数是常用的统计信息. 题目 老师给了你 n 个整数组成的测量数据,保证有序(可能为升序或降序),可能存在重 ...

  2. CCF计算机软件能力认证试题练习:201803-2 碰撞的小球

    碰撞的小球 来源:CCF 标签: 参考资料: 相似题目: 题目 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上, ...

  3. CCF计算机软件能力认证试题练习:201809-2 买菜

    买菜 来源:CCF 标签: 参考资料: 相似题目: 题目 小H和小W来到了一条街上,两人分开买菜,他们买菜的过程可以描述为,去店里买一些菜然后去旁边的一个广场把菜装上车,两人都要买n种菜,所以也都要装 ...

  4. CCF计算机软件能力认证试题练习:201909-2 小明种苹果(续)

    小明种苹果(续) 来源:CCF 标签: 参考资料: 相似题目: 题目 小明在他的果园里种了一些苹果树,这些苹果树排列成一个圆.为了保证苹果的品质,在种植过程中要进行疏果操作.为了更及时地完成疏果操作, ...

  5. CCF计算机软件能力认证试题练习:201609-3 炉石传说

    炉石传说 来源:CCF 标签: 参考资料: 相似题目: 题目 <炉石传说:魔兽英雄传>(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集 ...

  6. CCF计算机软件能力认证试题练习:201803-4 棋局评估

    棋局评估 来源:CCF 标签: 参考资料: 相似题目: 题目 Alice和Bob正在玩井字棋游戏. 井字棋游戏的规则很简单:两人轮流往3*3的棋盘中放棋子,Alice放的是"X", ...

  7. CCF计算机软件能力认证试题练习:201912-3 化学方程式

    化学方程式 来源:CCF 标签: 参考资料: 相似题目: 题目 化学方程式,也称为化学反应方程式,是用化学式表示化学反应的式子.给出一组化学方程式,请你编写程序判断每个方程式是否配平(也就是方程式中等 ...

  8. CCF计算机软件能力认证试题练习:201612-2 工资计算

    工资计算 来源: 标签: 参考资料: 相似题目: 题目 小明的公司每个月给小明发工资,而小明拿到的工资为交完个人所得税之后的工资.假设他一个月的税前工资(扣除五险一金后.未扣税前的工资)为S元,则他应 ...

  9. CCF计算机软件能力认证试题练习:201712-3 Crontab

    Crontab 来源: 标签: 参考资料: 相似题目: 题目 输入 输出 输入样例 3 201711170032 201711222352 0 7 * * 1,3-5 get_up 30 23 * * ...

  10. CCF计算机软件能力认证试题练习:201512-2 消除类游戏

    消除类游戏 来源: 标签: 参考资料: 相似题目: 题目 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行m列的游戏棋盘上进行,棋盘的每一行每一列的方格上放着一个有颜色的棋子,当一行或一列上有 ...

最新文章

  1. Android之工程目录介绍
  2. ASP.NET Core奇遇记:无用户访问,CPU却一直100%
  3. LaTeX设置单双栏方法 基于LaTex+VSCode+MAC
  4. 【PC工具】录屏软件,必须好用无广告!
  5. java nio长连接实现_kio: kio是基于jdk 1.6 nio实现的TCP长连接即时通讯框架。
  6. 数组翻转_LeetCode刷题实战151:翻转字符串里的单词
  7. 查了一晚上的资料,累啊。
  8. python结构_Python 项目的结构
  9. arm linux下交叉编译valgrind工具进行内存泄露检测和性能分析
  10. Spring源码之ApplicationContext(六)注册BeanPostProcessor
  11. vfp 打开服务器文件,VFP下客户机访问任意映射服务器的方法
  12. 使用js计算字符串的长度
  13. python豆瓣250爬取
  14. View和ViewGroup的区别
  15. php pwuj 挂马,网站挂马原理及实战
  16. 域名解析问题:聚名网域名该如何解析?有什么介绍吗?
  17. Linux初探之如何查看帮助文档自学命令
  18. 无人车系统(一):运动学模型及其线性化
  19. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第10章 分析句子的意思
  20. Ehcache基本使用

热门文章

  1. python中字典的知识讲解
  2. WEB前端应了解的NO.IE内核浏览器
  3. 【计算机网络知识扫盲】十二、★Net命令详解☆
  4. 惠普局域网共享打印机设置_惠普打印机局域网共享
  5. 一流科技登上开源供应商名录
  6. java网吧计费系统源码_网吧计费管理系统 - WEB源码|JSP源码/Java|源代码 - 源码中国...
  7. 牛客网初阶练习(6)
  8. stardic字典文件
  9. 从底层看android5.0系统的启动过程
  10. Linux 无线网卡驱动安装 Dell Inspiron R14-N4010 笔记本