定义每一个游戏由 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

这个题目主要 考察对于四则运算的优先级。但我的话并不知道正确常规的思路,就自己去想,结果一直卡bug,一个下午都在看过程找bug中度过。。。。。

自己的代码:(。。一点注释都没有哈哈哈,不用看这个。。

 自己思路中的问题,记录作为提醒。

#include <iostream>
#include<cmath>
#include<algorithm>
#include<iomanip>
#include<vector>
#include<string>
#include<cstring>
#include<map>
#include<stack>
using namespace std;
int sum ;int main()
{int n;cin >> n;//公式数cin.get();char ch;stack<char> zhan1;//原本是想着运算符和数字都用char来表示,数字只有-‘0’,就可以了,但stack<int>zhan2;  //忘记char类型只能表示0-9的数组,当为二位数时,就会丢失一位数字。for (int i = 0; i < n; i++){sum = 0;int j = 0;while (true)  {for (; j < 7; ) //这里我原本是while((ch=cin.get()!='\n'),想着读到回车就可以结{ch = cin.get();               很不错,但实际上是出循环了,但当外面的循环执行if ((ch >= '0'&&ch <= '9'))   到下一次时,因为有下一个运算式,所以又开始接收{                             cin>>ch;但当前的算式还没算完,卡bug,也看了好zhan2.push(ch - 48);      久。。。}else{if ((ch == '+') || ch == '-'){zhan1.push(ch);}else{int a = zhan2.top();zhan2.pop();char b;b = cin.get();j++;int c = b - 48;if (ch == '/')//这里我原本用的时*,但现实用的是×,题目就是,两者并不{             //一样,就一直报错,如果以后题目用除号是÷也要注意,可a = a / c;//可以找一下对应的十进制数,作为判断依据。}else{a = a *c;}zhan2.push(a);}}j++;}int re;if (zhan2.size()==1&&zhan1.size()==0){sum = zhan2.top();zhan2.pop();if (sum < 0)sum = 0 - sum;break;}int a = zhan2.top();zhan2.pop();int c = zhan2.top();zhan2.pop();char b = zhan1.top();zhan1.pop();if (b == '+')//这里是我在实验题目所给数据发现的,自己在运算时,没注意运算是有先后re = a + c;//顺序的,先进栈的在前面,后进栈的在后面。elsere = a - c;zhan2.push(re);}if (sum == 24)cout << "Yes" << endl;elsecout << "No" << endl;getchar();}return 0;}

正确的思路: 首先对于数字和运算符,要分开用char类型和int类型的stack来储存,因为只用插入来储存的话,char只能表示0~9;所以当计算结果为两位后,就会掉一位,我当时就看了好久。  主要是对于运算符的优先级分析:栈顶中的(* 、/)>接收的(*、/)>栈顶中的(+、-)>接收的(+、-)。这样的优先级的运算是要不断的与运算栈的运算符比较的,例如接收为+,则定比栈顶的运算符优先级小的,则让栈顶的运算,同时栈顶元素弹出,参加运算后,再次与弹出后的栈中新栈顶元素比较,直到运算参与运算或压入栈中。                                                                           

同时我们也可以分析出,这样的优先级,栈中运算符是不可能同时存在(+ -)与(* /)的。

思路代码:

可以注意到:num1,num2参与运算时是有先后顺序的,后入栈的在后面,先入在前。

1-2 二十四点 (20 分)【Csp认证真题】相关推荐

  1. CCF CSP201903-2二十四点

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

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

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

  3. CCF201903-2 二十四点(100分)【表达式计算】

    问题链接:CCF201903-2 二十四点 问题分析: 表达式计算问题,关键是对输入流进行处理,需要考虑表达式中运算符的优先级.简单的逻辑,用穷举法就可以了. 用Python语言来实现的话,问题就简单 ...

  4. csp试题2:二十四点

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

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

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

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

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

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

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

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

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

  9. 经典二十四点程序游戏

    经典二十四点程序算法 来源:http://www.xici.net/d190569991.htm 一.概述 算24点:任意给定四个整数,用加.减.乘.除以及适当的括号连接,无论顺序,使计算结果为24, ...

最新文章

  1. ORM表之间的多对多处理
  2. 20个必不可少的Python库
  3. 查看LINUX进程内存占用情况
  4. 在Hadoop集群实施成功后再次格式化名称节点,datanode无法加入集群的处理办法
  5. 图像处理---《Canny 边缘检测》
  6. nginx 优化配置
  7. Fisco bcos 在多机器上搭建多个节点的区块链网络 教程
  8. 利用Jwing窗口写程序-----简单计算器(JAVA实用教程2-第五版 第九章 编程题 三(2)小题)
  9. PostgreSQL 删除重复数据
  10. linux中安装rpm命令,linux下,如何安装rpm命令?
  11. IE8.0中显示不出来图片其他浏览器都可以显示
  12. 如何安装固态硬盘,并将其设为系统盘
  13. rpm软件安装冲突:conflicts with
  14. 数据结构题及c语言版答案第七章,数据结构第七章习题答案
  15. spingioc浅见
  16. “反百度”,正义?邪恶?
  17. AutoCAD2014打开闪退的解决办法
  18. 微信小程序购物商城系统
  19. 机器学习--高等数学篇--线性代数篇04--矩阵03(完)
  20. 在校大学生如何办理护照及港澳通行证?

热门文章

  1. ”微服务一条龙“最佳指南-“最佳实践”篇:大厂服务端部署
  2. 如何把多张图片合成视频
  3. 福建师范大学2022年2月课程考试《计算机应用基础》作业考核试题
  4. Hexo-Theme-Sakura 实践记录
  5. JSPatch转换器:可直接将OC代码转换成JS代码
  6. TC8:UDP_MessageFormat_01-02
  7. Java Idea设置运行内存大小(开发必备)
  8. 解决 Ubuntu 安装显卡驱动后,屏幕变黄的原因
  9. win10邮件同步出错
  10. 光耦的种类、选型和分析