欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

玩转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