24点游戏算法(HJ67)
一:解题思路
这道题目可以扩展为:从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; }

浙公网安备 33010602011771号