CDOJ 24点游戏
来源:互联网 发布:单片机与接口技术 编辑:程序博客网 时间:2024/06/04 18:55
题目连接
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
题意
用尽4个数,可以出现分数,可以加括号,能否凑出24点
题解
优先深度搜索,要搜索所有的情况,x1-x2与x2-x1,x1/x2与x2/x1都是两种情况,x1*x2,x1+x2只有一种情况
代码
#include<bits/stdc++.h>using namespace std;#define max 1000typedef pair<int,int>p;#define INF 1e9+7#define ll long long#define eps 1e-6queue<double> que;int num[5];//double tot=0;bool dfs(int n){ if (n==1) { if (fabs(24-num[0])<eps)//精度足够小 就可以达到24的要求 { return true; } else{ return false; } } for (int i = 0; i < n; ++i) { int i1=num[i]; int i2=num[i+1]; for (int j = i+1; j <n ; ++j) { num[j]=num[n-1]; //减小搜索的数组大小 num[i]=i1+i2;if(dfs(n-1))return 1;//更新num[i]作为此次搜索的新数据 num[i]=i1*i2;if(dfs(n-1))return 1; num[i]=i1-i2;if(dfs(n-1))return 1; num[i]=i2-i1;if(dfs(n-1))return 1; if (i1)// i1不为0 0不能作为分母 { num[i]=i2/i1;if(dfs(n-1))return 1; } if (i2) { num[i]=i1/i2;if(dfs(n-1))return 1; } num[i]=i1;// 此次num[i]搜索没有找到和为24,把num[i] num[j]的值还原,重新开始搜索 num[j]=i2; // } } return 0;}int main(int argc, char const *argv[]){ int t; cin>>t; for (int i = 0; i < t; ++i) { cin>>num[0]>>num[1]>>num[2]>>num[3]; if (dfs(4)) { printf("yes\n"); } else{ printf("no\n"); } } return 0;}
Get
0 0
- CDOJ 24点游戏
- Cdoj 24点游戏之解题报告
- 24点游戏代码
- 24点游戏
- 24点扑克牌游戏
- 24点游戏
- 24点游戏
- 《24点游戏》
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏
- 24点游戏源码
- 24点游戏
- 24点游戏-hero
- Asp.net MVC的传值方式(一)
- 除法取模(逆元)
- 静态绑定和动态绑定
- Object-C基础(9)——多态、类别、扩展与协议
- RPC
- CDOJ 24点游戏
- Python有道词典
- java工程师最新面试题(输入输出部分)
- JAVAEE 框架 2016-3-27
- 常见jar包说明
- Java两个线程交替打印(实现Runnable接口)
- 十个值得一试的开源深度学习框架
- Android中handle用法总结
- uestc1131男神的礼物【dp】