C ++中的24游戏

假设我们有四张牌;这些卡的编号从1到9。我们必须检查它们是否可以通过+,-,*,/之类的运算符进行运算以获得24。因此,如果我们有一些数字[4,9,2,6 ],则可以通过(4 * 9)–(2 * 6)得到24,答案将是正确的。

为了解决这个问题,我们将遵循以下步骤-

  • epsilon:= 10.0 ^ -5

  • 定义一个函数solve(),它将采用数组v,

  • 如果v的大小等于1,则-

    • | v [0]-24.0 |时返回true <= epsilon

  • 对于初始化i:= 0,当i <v的大小时,更新(将i增加1),执行-

    • 如果i与j相同,则:忽略以下部分,跳至下一个迭代

    • 定义数组res

    • 对于初始化k:= 0,当k <v的大小时,更新(将k增加1),执行-

    • 对于初始化k:= 0,当k <4时,更新(将k增加1),执行-

    • 在res的末尾插入v [k]

    • 如果i不等于k并且j不等于k,则-

    • 返回真

    • 在res的末尾插入v [i] / v [j]

    • 在res的末尾插入v [i] * v [j]

    • 在res的末尾插入v [i]-v [j]

    • 在res的末尾插入v [i] + v [j]

    • 如果operator [k]与'+'相同,则-

    • 否则,如果operator [k]与'-'相同,则-

    • 否则,如果operator [k]与'*'相同,则-

    • 除此以外

    • 如果solve(res),则-

    • 从res删除最后一个元素

    • 对于初始化j:= 0,当j <v的大小时,更新(将j增加1),执行-

    • 返回假

    • 从主要方法执行以下步骤-

    • 定义数组v

    • 对于初始化i:= 0,当i <nums大小时,更新(将i增加1),执行-

      • 在v的末尾插入nums [i]

    • 返回solve(v)

    让我们看下面的实现以更好地理解-

    示例

    #include <bits/stdc++.h>
    using namespace std;
    class Solution {
    public:
       char operators[4] = {'+', '-', '/', '*'};
       double epsilon = pow(10.0, -5);
       bool judgePoint24(vector<int>& nums) {
          vector <double> v;
          for(int i = 0; i < nums.size(); i++){
             v.push_back(nums[i]);
          }
          return solve(v);
       }
       bool solve(vector <double> v){
          if(v.size() == 1){
             return abs(v[0] - 24.0) <= epsilon;
          }
          for(int i = 0; i < v.size(); i++){
             for(int j = 0; j < v.size(); j++){
                if(i == j) continue;
                   vector <double> res;
                for(int k = 0; k < v.size(); k++){
                   if(i != k && j != k){
                      res.push_back(v[k]);
                   }
                }
                for(int k = 0; k < 4; k++){
                   if(operators[k] == '+'){
                      res.push_back(v[i] + v[j]);
                   }else if(operators[k] == '-'){
                      res.push_back(v[i] - v[j]);
                   }else if(operators[k] == '*'){
                      res.push_back(v[i] * v[j]);
                   }else{
                      res.push_back(v[i] / v[j]);
                   }
                   if(solve(res)) return true;
                      res.pop_back();
                }
             }
          }
          return false;
       }
    };
    main(){
       Solution ob;
       vector<int> v = {4,9,2,6};
       cout << (ob.judgePoint24(v));
    }

    输入值

    {4,9,2,6}

    输出结果

    1