题解 | #24点运算#

#include <bits/stdc++.h>
using namespace std;

int main() {
    string s;
    getline(cin,s);
    stringstream ss(s);
    vector<int> nums;
    while(ss >> s){
        if(s == "joker" || s == "JOKER"){
            cout<<"ERROR"<<endl;
            return 0;
        }
        if(s == "J") nums.push_back(11);
        else if(s == "Q") nums.push_back(12);
        else if(s == "K") nums.push_back(13);
        else if(s == "A") nums.push_back(1);
        else nums.push_back(stoi(s));
    }
    auto add = [](int a, int b){
        return a + b;
    };
    auto minus = [](int a, int b){
        return a - b;
    };
    auto mult = [](int a, int b){
        return a * b;
    };
    auto div = [](int a, int b){
        if(b == 0) return -1;
        return a / b;
    };  
 	function<int(int,int)> op[4] = {add, minus, mult, div};
    
    function<string(int)> itos = [](int p){
        const string P = "0A23456789*JQK";
        if(p==10) return string("10");
        else return P.substr(p,1);
    };

  	string sop = "+-*/";

    do{
        for(int i = 0; i < 4; ++i){
            for(int j = 0; j < 4; ++j){
                for(int k = 0; k < 4; ++k){
                    int ans = op[k](op[j](op[i](nums[0],nums[1]),nums[2]),nums[3]);
                    if(ans == 24){
                        for(int p = 0; p < 4; ++p){
                            cout<<itos(nums[0])<<sop[i]
                                <<itos(nums[1])<<sop[j]
                                <<itos(nums[2])<<sop[k]
                                <<itos(nums[3]);
                            return 0;
                        }
                    }
                }
            }
        }
    }while(next_permutation(nums.begin(),nums.end()));

    cout<<"NONE"<<endl;

    return 0;
}

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务