hiho一下 第九十八周
2016-05-17 19:24
471 查看
Problem: 搜索一·24点
Description: 经典的24点游戏
Solution: 枚举搜索,运算符共有4种,四个数字的排列方式有4!种。枚举排列,同时通过DFS枚举三个位置上的运算符情况,最后枚举括号的情况,括号的情况有5种。通过这样的暴力枚举,一旦我们找到了24点的情况我们就停止枚举。
Code(C++):
Description: 经典的24点游戏
Solution: 枚举搜索,运算符共有4种,四个数字的排列方式有4!种。枚举排列,同时通过DFS枚举三个位置上的运算符情况,最后枚举括号的情况,括号的情况有5种。通过这样的暴力枚举,一旦我们找到了24点的情况我们就停止枚举。
Code(C++):
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> using namespace std; const int M=4; const int EPS=1e-10; const char oper[]="+-*/"; double a[M]; char p[M]; bool flag; double add(double x,double y,int index) { switch(p[index]){ case '+': return x+y; case '-': return x-y; case '*': return x*y; case '/': return x/y; } } bool cal() { bool f0=(24==add(add(add(a[0],a[1],0),a[2],1),a[3],2)); bool f1=(24==add(add(a[0],a[1],0),add(a[2],a[3],2),1)); bool f2=(24==add(a[0],add(add(a[1],a[2],1),a[3],2),0)); bool f3=(24==add(a[0],add(a[1],add(a[2],a[3],2),1),0)); bool f4=(24==add(add(a[0],add(a[1],a[2],1),0),a[3],2)); return f0||f1||f2||f3||f4; } void dfs(int x) { if(x==3){ if(cal()) flag=true; return ; } if(flag) return ; for(int i=0;i<4;i++){ p[x]=oper[i]; dfs(x+1); if(flag) return ; } } int main() { int N; for(scanf("%d",&N);N--;){ for(int i=0;i<M;i++) scanf("%lfd",&a[i]); flag=false; sort(a,a+4); do{ dfs(0); if(flag) break; }while(next_permutation(a,a+4)); puts(flag? "Yes":"No"); } return 0; }
相关文章推荐
- WebBench学习使用
- synchronized锁详解
- 实现代理相关的“标准”格式
- 机器学习中为什么需要对数据进行归一化?
- hiho一下 第九十八周 题目1 : 搜索一·24点
- android代码中设置EditText的hint字体大小而不改变EditText的文字大小
- 专访阿里陈康贤:我所理解的网站架构
- Windows 回调监控 <一>
- java之将101-300范围内整数分解为质因数
- 微信公众号第三方平台开发PYTHON教程 PART 7
- [团队项目]SCRUM项目4.0
- 界面日期的比较
- nginx添加nginx_upstream_check_modules
- 设计模式之单例模式
- 2015年中国1%人口抽样调查主要数据公报(全文)
- Linux驱动开发要点
- ROS第一个程序:机器人直行和旋转
- Java字符串方法replace()、replaceAll()、replaceFirst()的区别和使用方法
- scala开发环境与编辑器
- UI