24 Game
来源:互联网 发布:知乎 邮箱注册 编辑:程序博客网 时间:2024/05/22 13:14
You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated through *
, /
, +
, -
, (
, )
to get the value of 24.
Example 1:
Input: [4, 1, 8, 7]Output: TrueExplanation: (8-4) * (7-1) = 24
Example 2:
Input: [1, 2, 1, 2]Output: False
Note:
- The division operator
/
represents real division, not integer division. For example, 4 / (1 - 2/3) = 12. - Every operation done is between two numbers. In particular, we cannot use
-
as a unary operator. For example, with[1, 1, 1, 1]
as input, the expression-1 - 1 - 1 - 1
is not allowed. - You cannot concatenate numbers together. For example, if the input is
[1, 2, 1, 2]
, we cannot write this as 12 + 12.
列出四个数的全排列,对每一个排列进行所有可能的运算(三个位置的运算符加减乘除有4*4*4=64种可能,插入括号有6种方式),检查运算结果是否为24。
#include<iostream>#include<vector>#include <cmath>#include <algorithm>using namespace std;class Solution {public:vector<double> operands; bool judgePoint24(vector<int>& nums) { for (int i = 0 ;i < 4; i++) operands.push_back(nums[i]); for (int i = 0; i < 24; i++) {for (int x = 1; x <= 4; x++)for (int y = 1; y <= 4; y++)for (int z = 1; z <= 4; z++) {double left,middle,right,result;left=compute(x, operands[0], operands[1]);middle=compute(y, operands[1],operands[2]);right=compute(z,operands[2], operands[3]);result=compute(y,left,operands[2]);result=compute(z,result,operands[3]);if (fabs(result-24)<0.001) return true;//a?b?c?dresult=compute(y, left,right);if (fabs(result-24)<0.001) return true;//(a?b)?(c?d)result=compute(x, operands[0], middle);result=compute(z, result, operands[3]);//(a?(b?c))?dif (fabs(result-24)<0.001) return true;result=compute(z, middle,operands[3]); result=compute(x, operands[0],result);//a?((b?c)?d) if (fabs(result-24)<0.001) return true;result= compute(y,left,right);if (fabs(result-24)<0.001) return true;//a?b?(c?d)result=compute(y,operands[1],right);result=compute(x,operands[0],result);if (fabs(result-24)<0.001) return true;//a?(b?(c?d))}next_permutation(operands.begin(),operands.end());}return false; }double compute(int oper, double & a, double& b) {if (oper==1) return a+b;if (oper==2) return a-b;if (oper==3) return a*b;if (oper==4) {if (b==0) return 0; return a/b;}}};
阅读全文
0 0
- 24 Game
- 24 Point game
- cf468A 24 Game
- codeforces a 24 game
- A. 24 Game
- nyoj 24 Point game
- 【CODEFORCES】 C. 24 Game
- H - 24 Game
- nyoj43 24 Point game
- 24 Point game
- NYOJ43 24 Point game
- NYOJ43 24 Point game
- 24 Game CodeForces
- 679. 24 Game
- 24 game [LeetCode 679]
- [LeetCode]679. 24 Game
- Compute 24 Game-LintCode
- game
- 网络判断
- 【英语】秋风吹---9月英语
- Java泛型中的通配符
- 前端性能优化----yahoo前端性能团队总结的35条黄金定律
- Hibernate多对多操作
- 24 Game
- 写程序学ML:决策树算法原理及实现(三)
- 弹性分布式数据集:一种对内存集群计算的容错抽象(一)
- RedHat安装git报错 expected specifier-qualifier-list before ‘z_stream’
- TMS320C6678 三路H264
- 短信验证
- 26. Remove Duplicates from Sorted Array
- winform 程序 动态生成控件练习
- 笔记——cin快速读写