题解 | #24点运算#

24点运算

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

#include <iostream>
#include <limits>
#include <ostream>
#include <string>
#include <unordered_map>
#include <sstream>
#include <vector>
#include <deque>
using namespace std;

bool back_tracking(vector<int>& vec, vector<string>& vec_s, int n, vector<bool>& vec_b, int sum, string res ) {
    if(n == 0) {
        if(sum == 24) {
            cout << res <<endl;
            return true;
        }else return false;
    } 
    // cout << n <<" "<< res << "  "<< sum<<endl;
    for(int i = 0; i < vec.size(); i++) {
        if(n == 4) {
            vec_b[i] = true;
            int num = vec[i];
            string s = vec_s[i];
            back_tracking(vec, vec_s, 3, vec_b, num, s);
            vec_b[i] = false;
        }
        else {
            if(vec_b[i]) continue;
            for(int j = 0; j < 4; j++) {
                if(j == 0) {
                    int num = sum + vec[i];
                    string s = res + '+' + vec_s[i];
                    vec_b[i] = true;
                    if(back_tracking(vec, vec_s, n - 1, vec_b, num, s)) return true;
                    vec_b[i] = false;
                }else if(j == 1) {
                    int num = sum - vec[i];
                    string s = res + '-' + vec_s[i];
                    vec_b[i] = true;
                    if(back_tracking(vec, vec_s, n - 1, vec_b, num, s)) return true;
                    vec_b[i] = false;
                }else if(j == 2) {
                    int num = sum * vec[i];
                    string s = res + '*' + vec_s[i];
                    vec_b[i] = true;
                    if(back_tracking(vec, vec_s, n - 1, vec_b, num, s)) return true;
                    vec_b[i] = false;
                }else {
                    int num = sum / vec[i];
                    string s = res + '/' + vec_s[i];
                    vec_b[i] = true;
                    if(back_tracking(vec, vec_s, n - 1, vec_b, num, s)) return true;
                    vec_b[i] = false;
                }
            }

        }
    }
    return false;
}

int main() {
    string str;
    unordered_map<string, int> map = {{"A", 1},{"2",2},{"3",3},{"4",4},{"5",5},{"6",6},{"7",7},
                                        {"8",8},{"9",9},{"10",10},{"J",11},{"Q",12},{"K",13}};
    while (getline(cin, str)) { // 注意 while 处理多个 case
        stringstream ss(str);
        string tmp;
        vector<int> vec;
        vector<string> vec_s;
        vector<bool> vec_b(4, false);
        while(getline(ss, tmp, ' ')) {
            if(map[tmp] == 0) {
                cout <<"ERROR"<<endl;
                return 0;
            }
            vec.push_back(map[tmp]);
            vec_s.push_back(tmp);
        }
        string res = "";
        int sum = 0;
        if(back_tracking(vec, vec_s, 4,vec_b, sum, res)) {
            cout << res <<endl;
        }
        else cout <<"NONE"<<endl;
        
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

牛客156169118号:这怎么看是不是外包啊
点赞 评论 收藏
分享
谁知道呢_:要掉小珍珠了,库库学三年,这个结果
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务