玩转24点:HJ67算法详解
最编程
2024-02-01 10:59:54
...
一:解题思路
这道题目可以扩展为:从0到n中,任意选出m个数字,然后任意通过加减乘除的组合,得到一个定值,求是否存在这样的组合?
二:完整代码示例 (C++版和Java版)
C++代码:
#include <iostream> #include <vector> #include <algorithm> using namespace std; void check(vector<int>& nums, int start, double result, bool& isSuccess) { if (start == nums.size()) { if (abs(result - 24) < 1e-6) { isSuccess = true; return; } } else { for (int i = start; i < nums.size(); i++) { check(nums,start+1,result+nums[start],isSuccess); check(nums,start+1,result-nums[start],isSuccess); check(nums,start+1,result*nums[start],isSuccess); check(nums,start+1,result/nums[start],isSuccess); } } } int main() { vector<int> nums(4,0); while (cin >> nums[0] >> nums[1] >> nums[2] >> nums[3]) { sort(nums.begin(),nums.end()); bool isSuccess = false; do { check(nums,0,0,isSuccess); if (isSuccess) break; } while (next_permutation(nums.begin(),nums.end())); if (isSuccess) cout << "true" << endl; else cout << "false" << endl; } return 0; }
原文地址:https://www.cnblogs.com/repinkply/p/13419671.html
上一篇: 使用Gaussian找到圆锥交点的方法
推荐阅读
-
玩转数据结构与算法:图的邻居连接方式探索 - 邻接表与邻接矩阵详解
-
熬夜探讨:玩转密码破解艺术——攻克HASH算法加密之谜,详解如何破译哈希
-
玩转高阶导数:运算法则与莱布尼茨定理详解
-
玩转 Python 图像处理用OpenCV(12):罗伯茨、普瑞魏特、Sobel与拉普拉斯边缘检测算法详解
-
玩转 Python 图像处理用OpenCV(12):罗伯茨、普瑞魏特、Sobel与拉普拉斯边缘检测算法详解
-
玩转Python:实用技巧(6)——贪心法与欧几里得距离算法详解
-
玩转24点:深度优先搜索算法详解 (noi 2.5_1789)
-
玩转24点:HJ67算法详解
-
玩转PID控制算法系列(6):单神经元自适应PID控制器详解