ccfcsp201903-2 24点游戏

CCF CSP201903-2二十四点(C++100) CCF CSP201903-2二十四点 栈模拟 #include<iostream> #include<stack> #include<string> #include<map> using namespace std; stack<int>number; stack<char>sign; map<char,int>mp; int deal(int num1, int num2, char c){ if(c == 'x' 阅读详情

【题目背景】

二十四点是一款著名的纸牌游戏,其游戏的目标是使用 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。
【样例 1 输入】
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
【样例 1 输出】
Yes
No
No
Yes
Yes
No
No
No
Yes
Yes
【样例 1 解释】
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
 

代码:(借鉴了思路分析,改进了代码完美运行)

#include <iostream>
#include <string>

using namespace std;

int a[4], b[3];
int Caculate(string s) {
	int n = s.length();
	a[0] = s[0] - '0';
	int cnt = 1, cntb = 0;
	for (int i = 1; i < n; i++) {
		if (i % 2 == 0) {
			a[cnt++] = s[i] - '0';
		}
		else {
			b[cntb++] = s[i];
		}
	}
	int tmp;
	for (int i = 0; i < 3; i++) {
		if (b[i] == '+' || b[i] == '-') {
			continue;
		}
		else {
			if (b[i] == 'x') {
				int l = i;
				while (a[l] == -1) {//判断是否计算过a[i];
					l = l - 1;
				}
				tmp = a[l] * a[i + 1];
				a[l] = tmp;
				a[i + 1] = -1;
			}
			else if (b[i] == '/') {
				int l = i;
				while (a[l] == -1) {
					l = l - 1;
				}
				tmp = a[l] / a[i + 1];
				a[l] = tmp;
				a[i + 1] = -1;
			}
		}
	}
	int ans = a[0];
	for (int i = 0; i < 3; i++) {
		if (b[i] == '+'){
			ans = ans + (a[i + 1]);
		}
		else if(b[i]=='-'){
			ans = ans - (a[i + 1]);
		}
	}
	return ans;
}

int main() {
	int n;
	cin >> n;
	string str[10000];
	for (int i = 0; i < n; i++) {
		char s[6];
		cin >> s;
		str[i] = s;
		
	}
	for (int i = 0; i < n; i++) {
		int ans = Caculate(str[i]);
		if (ans == 24) {
			cout << "Yes" << endl;
		}
		else {
			cout << "No" << endl;
		}
	}
	return 0;
}

 

 


 


 

CCF计算机软件能力认证试题练习:201903-2 二十四点 二十四点 来源:CCF 标签: 参考资料: 相似题目: 背景 二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24。 题目 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。其中加法用符号 + 表示,减法用符号 - 表示,乘法用小写字母... 阅读详情

相关推荐

电源设计避坑指南:半桥LLC软启动的5个常见错误及解决方案

本文针对半桥LLC谐振变换器软启动过程中的五个常见设计错误,提供了详细的工程解决方案。重点分析了忽视谐振腔初始状态导致的电流冲击、软启动斜坡与环路带宽不匹配、开环到闭环切换时机不当、变压器偏磁以及参数未考虑边界条件等问题,并给出了包括主动预充电、自适应斜坡、最佳切换点判定等实用调试技巧,帮助工程师实现平稳可靠的电源启动。

weixin_29260291的博客 283

Problem E: 二十四点

定义每一个游戏由4个从1-9的数字和3个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其它字符,运算顺序按照四则运算顺序进行。其中加法用+表示,减法用-表示,乘法用小写字母x表示,除法用/表示,在游戏里除法为整除。第一行输入一个整数n,从第2行开始到第n+1行中,每一行包含一个长度为7的字符串,为上述24点游戏,保证数据格式合法。包含n行,对于每一个游戏,如果其结果为24,则输出字符串Yes,否则输出字符串No。老师给了你n个游戏的解,请你编程验证每个游戏的结果是否为24。从标准输入读入数据。

QQ3503814312的博客 570

从零到一:基于DESeq2的转录组差异表达分析实战指南

本文详细介绍了基于DESeq2的转录组差异表达分析实战指南,涵盖数据准备、标准化处理、差异分析及结果解读等关键步骤。DESeq2凭借其稳定性和对低表达基因的友好处理,成为转录组数据分析的首选工具。文章还提供了常见问题排查和优化建议,帮助研究者高效完成从分析到发表的完整流程。

weixin_26759093的博客 274

CCF试题 201903-2 二十四点解析

原题 二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24。 题目 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。其中加法用符号 + 表示,减法用符号 - 表示,乘法用小写字母 x 表示,除法用符号 / 表示。在游戏里除法为整除,例如 2 /...

小松与蘑菇 3198

从动态规划到最优控制:Hamilton-Jacobi-Bellman (HJB) 方程的核心思想与应用

本文深入解析了Hamilton-Jacobi-Bellman (HJB) 方程的核心思想与应用,从动态规划到最优控制的演变过程。通过实际案例展示了HJB方程在机器人路径规划、工业机械臂优化等领域的实践价值,并探讨了数值求解方法和深度学习结合的神经HJB前沿进展。

weixin_28700411的博客 458

面试题-手撕NMS(非极大值抑制)

非极大值抑制(Non-Maximum Suppression,NMS)是一种常用于目标检测和计算机视觉中的算法,用于去除重叠的边界框,保留最可能是真实目标的边界框。其核心就是对一组检测框,找出其中属于同一个类别且分数最高的那个框,然后把和这个框的IOU值大于阈值的那些框都删掉。

zhaoyqcsdn的博客 1109

CCF CSP——二十四点 (201903-2)

题目背景       二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24。 题目描述:       定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符...

qq_44408319的博客 666

复现HumanMAC(HumanMAC: Masked Motion Completion for Human Motion Prediction)

Human3.6M和HumanEva-I都放到data目录下(记得将data_multi_modal-20250320T022408Z-001.zip和humaneva_multi_modal-20250320T022412Z-001.zip解压缩并且分别重命名为data_multi_modal和humaneva_multi_modal)。生成的gif存放在inference目录下zero_shot_<INDEX>下的out目录下。新建一个data目录,将

qq_52643100的博客 832

201903-2 二十四点

背景 二十四点是一款著名的纸牌游戏,其游戏的目标是使用 3 个加减乘除运算使得 4张纸牌上数字的运算结果为 24。 题目 定义每一个游戏由 4 个从 1-9 的数字和 3 个四则运算符组成,保证四则运算符将数字两两隔开,不存在括号和其他字符,运算顺序按照四则运算顺序进行。其中加法用符号 + 表示,减法用符号 - 表示,乘法用小写字母 x 表示,除法用符号 / 表示。在游戏里除法为整除,例如 2 /...

weixin_43625164的博客 580

炸金花游戏(3)--基于EV(期望收益)的简单AI模型

前言:   炸金花这款游戏, 从技术的角度来说, 比德州差了很多. 所以他的AI模型也相对简单一些. 本文从EV(期望收益)的角度, 来尝试构建一个简单的炸金花AI. 相关文章:  德州扑克AI--Programming Poker AI(译).  系列文章说来惭愧, 之前一直叫嚷着写德州AI, 不过可惜懒癌晚期, 一直没去实践, T_T. 相比而言,***简单很多, 也更偏重于运...

weixin_30377461的博客 2342

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

ccf csp 201903-2 二十四点

#include<iostream> using namespace std; bool isMD(char op){ return (op == '/' || op == 'x' ? true : false); } int op(char op, int num1, int num2){ switch (op) { case '+': ...

lalala_HFUT的博客 5805

Arcgis加载在线地图(内涵各种在线地图)

这三个在线地图是最常用的在线地图,其他几个类型的在线地图请自行查看。,加载出在线图层说明连接成功,点击。1、首先打开Arcgis,找到。

爱吃雪糕的小布丁的博客 1万+

CCFCSP 201903-2 二十四点

思路:利用python中的eval函数,可以计算一个字符串表达式的值。只需要把里面乘号的x改成*,然后注意在除号/后面再加一个/。因为python中两个/才表示向下取整。 for T in range(int(input())): s=input() q='' for i in range(len(s)): if(s[i]=='x'): q+='*' else : q+=s[i] if(s[i]=='/.

菜鸡的学习记录 165

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ccf&csp 计算机职业资格认证考试 201903-2 24点 c++

具体c++实现如下: #include <cstdio> #include <cstring> #include <stack> #include <queue> using namespace std; stack <int> number; //存储数字 stack <char> symbol; //存储符号 queue <int> flag; ...

qq_47403671的博客 444

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

ccfcsp认证201903-3 损坏的RAID5

试题 分析:1、当l>=n-1时,所有数据才可以完全读出 当l<n-1时,所有损坏的硬盘上的数据均无法读出2、可以把8个字符(即四个字节、一个块)放进一个int中3、询问编号为b的块在什么位置,即,编号为bs=b/s的条带在什么位置,b块位于该条带的第b%s块4、下图的文字描述非常不好理解,但可以看图找规律 可以发现,不考虑校验条带的情况下,条带编号还是从左往...

WWX639888的博客 363

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

CCF小白刷题之路---201903-2 二十四点(C/C++ 100分)

一、题目描述 二、代码实现 #include<iostream> #include<vector> #include<string> #include<bits/stdc++.h> using namespace std; int main() { int n; cin>>n; for(int i=0;i<n;i++) { string str; cin>>st

要像蜗牛一样一步一步往上爬! 1576

ccfcsp 201903-2 二十四点

减号运算转换为加相反数是因为存在特殊情况a-b*c-d ,此时 c-d的-号视为减法没有问题,但是前面的负号由于算法原因,会计算为a-(b*c-d)不符合运算规则 #include <iostream> using namespace std; int main(){ int n, num[5], temp;//num[0]可以看作栈顶指针,num[1到4]存放运算式子里的数字 char op[5]; //存放运算符 ,同理op[0]可以看作栈顶指针 num[0] ...

m0_51686592的博客 170

CCFCSP 201903-2 二十四点(Python)

主要利用字符串的replace()方法对其中的字符进行替换,而eval方法是用于计算一个字符串表达式的值也很有用~ n=int(input()) a=[] for i in range(n): Str=input() Str=Str.replace("x","*") Str=Str.replace("/","//") if eval(Str)==24: a.append('Yes') else: a.append('No') for i

ffffffyr的博客 155

201903-2 二十四点 ccfcsp python

题目描述 代码及思路 用一个栈每次存储数据,若遇到符号则入栈,若遇到数字则根据栈顶符合进行运算:若是x或者是/,则立即计算(需要弹出栈顶的一个符号和数字)并入栈;若是+或者是-,则将数字入栈并继续运算。 最后再根据栈内元素进行加减运算就可。 m=int(input()) for i in range(m): strone=input() A=[-1] for j in range(len(strone)): if strone[j]=="x" or st

CGY的博客 187

CCFCSP-表达式求值-201903-2-二十四点

表达式求值: 一、中缀表达式转为后缀表达式:从头到尾读取中缀表达式的每个对象 运算数:直接输出 左括号:压栈(左括号在栈中的优先级最低) 右括号:将栈顶的运算符弹出并输出直至遇到左括号(出栈,不输出) 运算符:若优先级大于栈顶运算符时,则把它压栈; 若优先级小于等于栈顶运算符时,将栈顶运算符弹出并输出;再比较新的栈顶运算符,直到该运算符大于栈顶运算符优先级为止,然后将该运算符压栈; 若各对象处理完毕,则把堆栈中存留的运算符一并输出。 二、后缀表达式求值:从左到右读入后缀表达式的各项。 运算数:入栈。

weixin_43846587的博客 519

CCF CSP 二十四点 201903 第二题

这个题主要用栈进行求解 这里用到几个函数:弹栈pop 弹出栈顶元素top 入栈push 判断栈是否为空empty 思路是:用一个栈存放输入的数字,如果有乘法或者除法则放入运算的结果,遇到减号放入这个数的相反数 总之最后栈中存放的每个元素之和就是我们运算的结果 eg:9+3+3x4 放入9,放入3,放入3,遇到乘号,弹出3,放入3x4=12 最后栈中是9,3,12 结果为9+3+12=...

qq_40944487的博客 196

CCF CSP 2019-3-2 二十四点 C语言100分

CCF CSP 2019-3-2 二十四点 C语言100分 二十四点 完成时间11-22 17:19 代码长度1.034KB C 正确 100分 耗时0ms 代码长度2.527MB 一口气一次完成,一次通过100分,有点开心!! 思路: 先算乘除,把得到的结果赋给第二个数字,且第一个数字赋值为6562(因为999*9=6561,所以6562是不会出现的结果,只要大于6561就可以)例:3x4----->6562x12,做运算的时候只要判断下一个数有没有被使用过,如果使用过就跳过,直到找到第一个没有被用

JY_0329的博客 642

[CCF/CSP] 2019-(2) 二十四点 C++ 100分

试题名称 代码长度 编程语言 评测结果 得分 时间使用 空间使用 二十四点 1.778KB C++ 正确 100 15ms 528.0KB 关键点: 1. 中缀表达式转为前缀(或后缀)表达式,此题不考虑“(”“)”,所以比较简单。 2. 处理字符时,注意区别应该是char类型还是int类型。 3. 运算符的优...

AndrewJoe的博客 1947

CCF-CSP认证 刷题路线分享

刷题路线

2302_79939572的博客 2903
上一篇: 20150902 日期计算
下一篇: 201503302 数字排序
Rranwu
博客等级 码龄10年 4粉丝 27原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值