!算 24 (dfs)
来源:互联网 发布:网络机房综合布线系统 编辑:程序博客网 时间:2024/04/28 00:58
总时间限制: 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
代码(学自syx大佬)
#include<iostream>#include<cstdio>#include<algorithm>#include<cstring>#include<string>#include<cmath>#define LL long long#define p 0.00000001using namespace std;double num[5];bool f[5];bool dfs(int k)//计算完的卡号 { if(k==4){ for(int i=1;i<=4;i++) if(!f[i]&&fabs(num[i]-24.0)<p) return true; return false; } for(int i=1;i<=4;i++) if(!f[i]) for(int j=i+1;j<=4;j++) if(!f[j])//未计算过 { double tmp1=num[i],tmp2=num[j]; num[i]=tmp1+tmp2;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp1*tmp2;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp1-tmp2;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp2-tmp1;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp1/tmp2;f[j]=true; if(dfs(k+1)) return true; f[j]=false; num[i]=tmp2/tmp1;f[j]=true;//减或除以有两种情况 这是一个坑 if(dfs(k+1)) return true; f[j]=false; num[i]=tmp1;f[j]=false;//回溯 } return false;}int main(){ while(1){ memset(f,false,sizeof(f));//多组数据,每次初始化 scanf("%lf%lf%lf%lf",&num[1],&num[2],&num[3],&num[4]); if(num[1]==0&&num[2]==0&&num[3]==0&&num[4]==0) break; if(dfs(1)) printf("YES\n"); else printf("NO\n"); } return 0;}
1 0
- !算 24 (dfs)
- 算24点(DFS)
- OpenJudge 2787 算24(dfs)
- 扑克牌算24点 DFS
- [OpenJudge-NOI]算24 Dfs
- 24 Point game(dfs)
- UESTC--1252--24点游戏(dfs)
- NYOJ 43 24 Point game (DFS)
- DFS-Sticks(扑克24点)
- HDU 1427 速算24点(DFS) *
- HDU 1427 速算24点(dfs)
- HDU 4090 GemAnd Prince (DFS+BFS)/(DFS+DFS)
- (一般)POJ-2718 DFS套DFS
- 24点 - DFS
- DFS-速算24点
- pku 1011(dfs)
- poj1321(dfs)
- 1691(dfs + 回溯)
- 4 描述性统计量和统计图
- QT相同控件相似功能
- jq 改变其他兄弟元素的样式
- 蓝桥杯 算法训练 Anagrams问题
- tomcat学习笔记
- !算 24 (dfs)
- 安卓五大进程特点及srvice的基本概念
- 阿里云平台生产环境使用经验分享
- SylixOS实时以太网浅析
- Android系统架构学习
- VMware Workstation10.0.1 下Ubuntu12.04虚拟机与 win7 宿主机无法共享文件(夹)
- 推荐算法slope one之java实现
- ElasticSearch笔记
- 三步实现沉浸式状态栏浅析(即状态栏与APP同色)