cdoj 1252 24点游戏 dfs
24点游戏
Time Limit: 20 Sec
Memory Limit: 256 MB
题目连接
http://acm.uestc.edu.cn/#/problem/show/1252
Description
24点就是给你一串数字,问你是否通过加减乘除括号构成24点。
沈爷觉得这个很好玩,就决定考考你,给你4个数,可以交换位置,可以用加减乘除和括号,是否能构成24点呢?
注意哦~这里的除法并不是整数除法,比如样例
Input
第一行T,表示有多少组测试数据,1≤T≤50
接下来T行,每行4个正整数a1, a2, a3, a4,表示每个数都是多少,1≤ai≤13
Output
对于每一次询问,如果能够凑成24点,输出yes
,否则输出no
Sample Input
2
3 3 8 8
1 1 1 1
Sample Output
yes
no
HINT
题意
题解:
1.递归处理,深度优先搜索
dfs(int n) 表示我现在还剩下多少个数,没有处理
由于有括号的原因,我们每次就直接暴力枚举n个数中的两个数,然后进行加减乘除就好了,然后将这两个数变成新的一个数,然后dfs(n-1)就好了,这样不停的递归下去。
关于有理数除法的问题,我们有2种方法可以解决
(1)自己手写一个分数的类(比较麻烦),然后进行分数的加减乘除去解决这一道题
(2)由于只有4个数,而且每个数最大才13,所以我们直接全部用小数去处理就好了,最后的答案能够得到24的话,那么最后我们剩下的那个小数x,必定满足fabs(x-24)<Y,其中Y是一个接近于0的数。在本题,eps 只要小于0.01就能过
2.直接暴力写出所有情况即可
a[1]+a[2]+a[3]+a[4]
a[1]+a[2]+a[3]*a[4]
......
一直写下去就好
大概应该只有600多个
代码:
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
double a[];
bool fun(int n){
if(n==){
if(fabs(a[]-)<1e-)return true;
else return false;
}
for(int i=;i<n;i++){
for(int j=i+;j<n;j++){
double x1=a[i];
double x2=a[j];
a[j]=a[n-];
a[i]=x1+x2;if(fun(n-))return true;
a[i]=x1*x2;if(fun(n-))return true;
a[i]=x1-x2;if(fun(n-))return true;
a[i]=x2-x1;if(fun(n-))return true;
if(x2){a[i]=x1/x2;if(fun(n-))return true;}
if(x1){a[i]=x2/x1;if(fun(n-))return true;}
a[i]=x1;
a[j]=x2;
}
}
return false;
} int main()
{ int T;
cin>>T;
while(T--){
cin>>a[]>>a[]>>a[]>>a[];
if(fun())cout<<"yes\n";
else cout<<"no\n";
}
return ;
}
cdoj 1252 24点游戏 dfs的更多相关文章
- 24点游戏&&速算24点(dfs)
24点游戏 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- php实现 24点游戏算法
php实现 24点游戏算法 一.总结 一句话总结:把多元运算转化为两元运算,先从四个数中取出两个数进行运算,然后把运算结果和第三个数进行运算,再把结果与第四个数进行运算.在求表达式的过程中,最难处理的 ...
- Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game)
Leetcode之深度优先搜索&回溯专题-679. 24 点游戏(24 Game) 深度优先搜索的解题详细介绍,点击 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+, ...
- 经典趣味24点游戏程序设计(python)
一.游戏玩法介绍: 24点游戏是儿时玩的主要益智类游戏之一,玩法为:从一副扑克中抽取4张牌,对4张牌使用加减乘除中的任何方法,使计算结果为24.例如,2,3,4,6,通过( ( ( 4 + 6 ) - ...
- 24点游戏详细截图介绍以及原型、Alpha、Beta对比
原型设计 图片展示 功能与界面设计 1.登录注册 2.手机号验证 3.24点游戏 4.粉色系女生界面 Alpha 图片展示 功能与界面设计 1.24点游戏 2.背景音乐 3.可查看多种可能的答案 4. ...
- 【Nodejs】“快算24”扑克牌游戏算法
算24是一款扑克牌游戏,它的游戏方式是把四张牌的牌面数值通过四则运算得到结果24,四张牌必须仅用一次.这是一种挺好的锻炼孩子算数能力的扑克牌游戏. 各地玩法还有点差别,有的只算1-10,其它抽出来:有 ...
- bzoj1215 24点游戏
Description 为了培养小孩的计算能力,大人们经常给小孩玩这样的游戏:从1付扑克牌中任意抽出4张扑克,要小孩用“+”.“-”.“×”.“÷”和括号组成一个合法的表达式,并使表达式的值为24点. ...
- Leetcode 679.24点游戏
24点游戏 你有 4 张写有 1 到 9 数字的牌.你需要判断是否能通过 *,/,+,-,(,) 的运算得到 24. 示例 1: 输入: [4, 1, 8, 7] 输出: True 解释: (8-4) ...
- 用python代替人脑运算24点游戏
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:老方玩编程 PS:如有需要Python学习资料的小伙伴可以加点击下方链 ...
随机推荐
- 30种oracle常见的等待事件说明
1Buffer busy waits从本质上讲,这个等待事件的产生仅说明了一个会话在等待一个Buffer(数据块),但是导致这个现象的原因却有很多种.常见的两种是: 当一个会话视图修改一个数据块,但这 ...
- MySQL基础之第6章 创建、修改和删除表 .
6.1.创建表 6.1.1.创建表的语法形式 CREATE TABLE 表名 ( 属性名 数据类型 [完整性约束条件],属性名 数据类型 [完整性约束条件],...... 属性名 数据类型); 完整性 ...
- IIS应用程序池回收图文详解
转:http://blog.sina.com.cn/s/blog_8677fcaa010138uf.html 什么是应用程序池呢?这是微软的一个全新概念:应用程序池是将一个或多个应用程序链接到一个或多 ...
- 兼容个个浏览器Cookie的读写
function readCookie(name) { var nameEQ = name + "="; var ca = document.cookie.split('; ...
- [转] AE之分级颜色专题图渲染
原文 AE之分级颜色专题图渲染 参考代码1 private void 分级渲染ToolStripMenuItem_Click(object sender, EventArgs e) { //值分级 I ...
- java web 学习十一(使用cookie进行会话管理)
一.会话的概念 会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话. 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学曾 ...
- kettle实现文本文件数据抽取方法
KETTLE做调度的思路是,把一个有特定格式的的文本文件,写入ORACLE数据库表, 具体方法见如下操作: 首先来看下文本文件的内容: 1|test1 2|test2 3|test3 通过|进行分割的 ...
- 【原创】用python实现shell的tail操作
在工作过程中发现监控实时刷新文件时,不是那么的任性. 故结合shell中的tail,做了一个类似tail的python脚本. 详情如下: #!/usr/bin/env python #coding=u ...
- [Hive优化] 之 MapJoin
根据mapjoin的计算原理,MAPJION会把小表全部读入内存中,在map阶段直接拿另外一个表的数据和内存中表数据做匹配.这种情况下即使笛卡尔积也不会对任务运行速度造成太大的效率影响. mapjoi ...
- MapReduce Kmeans聚类算法
最近在网上查看用MapReduce实现的Kmeans算法,例子是不错,http://blog.csdn.net/jshayzf/article/details/22739063 但注释太少了,而且参数 ...