题解 | #24点运算#

24点运算

https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d

#include <cctype>
#include <iostream>
#include <string>
#include <vector>
#include <bits/stdc++.h>
using namespace std;
string res_str;
map<string, int> umap = {
    {"2", 2},
    {"3", 3},
    {"4", 4},
    {"5", 5},
    {"6", 6},
    {"7", 7},
    {"8", 8},
    {"9", 9},
    {"10", 10},
    {"J", 11},
    {"Q", 12},
    {"K", 13},
    {"A", 1},
};
bool bp(vector<string>& vec, vector<bool>& used, int result, int count,
        string path) {
    if (count == 4 && result == 24) {
        res_str = path;
        return true;
    }
    for (int i = 0; i < 4; i++) {
        if (used[i])
            continue;
        used[i] = true;
        if (count == 0) {
            if (bp(vec, used, result + umap[vec[i]], count + 1,
                    path + '+' + vec[i]))
                return true;
        } else if (bp(vec, used, result + umap[vec[i]], count + 1,
                      path + '+' + vec[i])
                   || bp(vec, used, result - umap[vec[i]], count + 1,
                         path + '-' + vec[i])
                   || bp(vec, used, result * umap[vec[i]], count + 1,
                         path + '*' + vec[i])
                   || bp(vec, used, result / umap[vec[i]], count + 1,
                         path + '/' + vec[i]))
            return true;
        used[i] = false;
    }
    return false;
}
int main() {
    string input;
    vector<string> vec;
    int index = 0;
    while (cin >> input) {
        if (input.size() > 1) {
            cout << "ERROR";
            index = 1;
            break;
        }
        if (input == "A" || input == "K" || input == "Q" || input == "J" || isdigit(input[0]))
            vec.push_back(input);
        else {
            cout << "ERROR";
            index = 1;
            break;
        }
    }
    if (index == 0) {
        vector<bool> used(4, false);
        if (bp(vec, used, 0, 0, "")) {
            cout << res_str.substr(1);
        } else {
            cout << "NONE";
        }
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

头像
03-25 16:22
南华大学 Java
点赞 评论 收藏
分享
03-29 14:19
门头沟学院 Java
你背过凌晨4点的八股文么:加油同学,人生的容错率很高,只是一个暑期罢了,后面还有很多机会!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务