UESTC--1252--24点游戏(dfs)
2016-03-08 14:12
363 查看
24点游戏
Submit
Status
Description
24点就是给你一串数字,问你是否通过加减乘除括号构成
24点。
沈爷觉得这个很好玩,就决定考考你,给你
4个数,可以交换位置,可以用加减乘除和括号,是否能构成
24点呢?
注意哦~这里的除法并不是整数除法,比如样例
Input
第一行
T,表示有多少组测试数据,
1≤T≤50
接下来
T行,每行
4个正整数
a1,
a2,
a3,
a4,表示每个数都是多少,
1≤ai≤13
Output
对于每一次询问,如果能够凑成
24点,输出
Sample Input
2
3 3 8 8
1 1 1 1
Sample Output
yes
no
Hint
3
3
8
8
就可以构造出
8÷(3–8÷3)=24
Source
第七届ACM趣味程序设计竞赛第二场(正式赛)
看着像一个排列组合一样,把所有的数字排序,然后列举所有可能的运算,这里传递的参数只有一个x,用来表示已经运算的次数,显然总共要运算四次,每次运算的时候取num【i】与后边的数字进行运算,x-1表示运算次数减少一个,区间也会减少,但是因为num【j】已经使用了,所以把将要消失的num【x-1】给num【j】,使得每一个数字都会被用到,因为运算结果尽量前移并且区间向前减小,所以最后结果存储在num【0】中,数据类型是double的,存储是近似存储,需要判断精度
24点游戏
Time Limit: 1000MS | Memory Limit: 65535KB | 64bit IO Format: %lld & %llu |
Status
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
3
3
8
8
就可以构造出
8÷(3–8÷3)=24
Source
第七届ACM趣味程序设计竞赛第二场(正式赛)
看着像一个排列组合一样,把所有的数字排序,然后列举所有可能的运算,这里传递的参数只有一个x,用来表示已经运算的次数,显然总共要运算四次,每次运算的时候取num【i】与后边的数字进行运算,x-1表示运算次数减少一个,区间也会减少,但是因为num【j】已经使用了,所以把将要消失的num【x-1】给num【j】,使得每一个数字都会被用到,因为运算结果尽量前移并且区间向前减小,所以最后结果存储在num【0】中,数据类型是double的,存储是近似存储,需要判断精度
#include<cstdio> #include<cstring> #include<cmath> #include<iostream> #include<algorithm> using namespace std; double num[10]; bool flag; bool dfs(int x) { if(x==1) { if(fabs(num[0]-24)<1e-2) return true; else return false; } double a,b; for(int i=0;i<x;i++) { for(int j=i+1;j<x;j++) { a=num[i]; b=num[j]; num[j]=num[x-1];//x表示运算的次数,也用来确定区间, //每次x-1,同时区间缩小,num[0]作为运算的结果 num[i]=a+b;if(dfs(x-1)) return true; num[i]=a-b;if(dfs(x-1)) return true; num[i]=b-a;if(dfs(x-1)) return true; num[i]=a*b;if(dfs(x-1)) return true; if(b!=0) num[i]=a/b;if(dfs(x-1)) return true;//除法分母不为0 if(a!=0) num[i]=b/a;if(dfs(x-1)) return true; num[i]=a;//回溯 num[j]=b; } } return false; } int main() { int t; cin>>t; while(t--) { flag=false; for(int i=0;i<4;i++) cin>>num[i]; if(dfs(4)) cout<<"yes"<<endl; else cout<<"no"<<endl; } return 0; }
相关文章推荐
- Version & Build & CFBundleShortVersionString & CFBundleVersion
- PHP之include/require深入了解
- UITableView回调和table相关成员方法详解
- CALayer和UIView
- Handler,Looper,MessageQueue(Message)
- [custom UI series]android 自动排布的标签布局
- RoboGuice 3.0 (二)进阶篇
- SGI STL (4) :: String Implementation Issue
- 深入理解SetUID
- Selenium中expected_conditions下text_to_be_present_in_element_value方法的使用
- Your build settings specify a provisioning profile with the UUID, no provisioning profile ...问题的解决办法
- JEasyUI: Bug Fixing for perpertygrid
- 在vs中开发TypeScript,使用Require,import,export的实现
- BlueStacks不仅支持x86和ARM处理器,新版BlueStacks并不是单纯的实现虚拟化,而是运行整个Android系统
- iOS画图-UIBezierPath和CAShapeLayer的简单使用
- leetcode--Range Sum Query - Immutable
- android开发系列之由ContentValues看到的
- 子线程更新UI,牵扯activity的启动过程
- JEasyUI: Create endless progressbar
- UMEditor(Ueditor mini)修改图片上传路径