题目
1789:算24
总时间限制: 3000ms 内存限制: 65536kB
描述
给出4个小于10个正整数,你可以使用加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。现在的问题是,是否存在一种方式使得得到的表达式的结果等于24。
这里加减乘除以及括号的运算结果和运算的优先级跟我们平常的定义一致(这里的除法定义是实数除法)。
比如,对于5,5,5,1,我们知道5 * (5 – 1 / 5) = 24,因此可以得到24。又比如,对于1,1,4,2,我们怎么都不能得到24。
输入
输入数据包括多行,每行给出一组测试数据,包括4个小于10个正整数。最后一组测试数据中包括4个0,表示输入的结束,这组数据不用处理。
输出
对于每一组测试数据,输出一行,如果可以得到24,输出“YES”;否则,输出“NO”。
样例输入
5 5 5 1
1 1 4 2
0 0 0 0
样例输出
YES
NO
理解
- 深搜,回溯,加了不行就撤销,改成-*/。按题意大概
- 可以使用加减乘除4种运算以及括号——坑,怎能理解到加减乘除不限。四个运算符,必须只用三个,所以得去掉一个。所以说不是非要都要用,也不是非要每个用一次。
- 括号可以有一个,也可以有两个。1 7 4 9——(9-1)(7-4)=83=24,7 3 1 5——(7-3)(5+1)=46=24。难点在括号。数子存在四个位置,标记一个就算用过了,没有标记就可以存运算结果。已经是结果了,当然是在括号里。没有标记的可以有两个。
代码
#include <bits/stdc++.h>
using namespace std;
double d[4];//四个整数,因为实数除法,干脆小数
bool ans,//最后结果,
k[4];//那个已经用过,还有结果存在数组哪个

文章讲述了如何使用C++编程实现24点游戏问题,通过递归和回溯策略,考虑加减乘除和括号的使用,以求解给定数字组合是否能得到24的表达式。
最低0.47元/天 解锁文章
883

被折叠的 条评论
为什么被折叠?



