题解 | #24点游戏算法#

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

看到很多题解包括官方题解都没考虑前后分别括号运算的情况,这里额外写一下

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

double cal(const double& a, const double& b, const char& c) {
    if (c == '+') {
        return a + b;
    }
    else if (c == '-') {
        return a - b;
    }
    else if (c == '*') {
        return a * b;
    }
    else return a / b;
}

bool check24(vector<double>& num) {
    char op[4] = {'+', '-', '*', '/'};
    
    do {
        for (int i = 0; i < 4; ++i) {
            for (int j = 0; j < 4; ++j) {
                for (int k = 0; k < 4; ++k) {
                    int first = cal(num[0], num[1], op[i]);
                    int second = cal(first, num[2], op[j]);
                    int secondBracket = cal(num[2], num[3], op[k]);

                    if (cal(second, num[3], op[k]) ==24 || cal(first, secondBracket, op[j]) == 24)
                        return true;
                }
            }
        }
 
    } while (next_permutation(num.begin(), num.end()));
   return false;
}

int main() {
    vector<double> num(4);
    for (int i = 0; i < 4; ++i) {
        cin >> num[i];
    }

    sort(num.begin(), num.end());

    if (check24(num)) {
        cout << "true" << endl;
    }
    else {
        cout << "false" << endl;
    } 
}
全部评论

相关推荐

勇敢的联想人前程似锦:如果我是你,身体素质好我会去参军,然后走士兵计划考研211只需要200多分。
点赞 评论 收藏
分享
10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务