题解 | #24点运算#

24点运算

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

#include <iostream>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;

string path;

unordered_map<string, int> mp{{"3",3},{"4",4},{"5",5},{"6",6},{"7",7},{"8",8},{"9",9},{"10",10},{"J",11},{"Q",12},{"K",13},{"A",1},{"2",2},{"joker",-1},{"JOKER",-1}};

unordered_map<int, string> mp1{{3,"3"},{4,"4"},{5,"5"},{6,"6"},{7,"7"},{8,"8"},{9,"9"},{10,"10"},{11,"J"},{12,"Q"},{13,"K"},{1,"A"},{2,"2"},{-1,"joker"},{-1,"JOKER"}};

bool dfs(vector<int> num,int sum){
    if(num.empty())
        return sum==24;
    for(int i=0;i<num.size();++i){
        vector<int> temp(num);
        temp.erase(i+temp.begin());
        int len=path.size();
        if(num.size()==4){
            path+=mp1[num[i]];
            if(dfs(temp,num[i]))
                return true;
            path=path.substr(0,len);
        }
        else{
        path+=mp1[num[i]];
        path.insert(path.begin()+len,'+');
        if(dfs(temp,sum+num[i]))
            return true;
        path.erase(path.begin()+len);
        path.insert(path.begin()+len,'-');
        if(dfs(temp,sum-num[i]))
            return true;
        path.erase(path.begin()+len);
        path.insert(path.begin()+len,'*');
        if(dfs(temp,sum*num[i]))
            return true;
        path.erase(path.begin()+len);
        path.insert(path.begin()+len,'/');
        if(dfs(temp,sum/num[i]))
            return true;
        path.erase(path.begin()+len);
        path=path.substr(0,len);
        }
    }
    return false;

}

int main() {
    vector<int> num(4);
    bool valid=true;
    for(int i=0;i<4;++i){
        string s;
        cin >> s;
        num[i]=mp[s];
        if(num[i]==-1)
            valid=false;
    }
    if(!valid)
        cout << "ERROR";
    else{
        if(dfs(num,0))
            cout << path.substr();
        else
            cout << "NONE";

    }

}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

10-13 22:56
门头沟学院 C++
rt,鼠鼠的浪潮网签明天过期,鼠鼠是山东人,好像自己也能接受。之前的面试大厂基本挂干净了,剩下小米二面后在泡,问了下面试官没有挂,但要泡。还有海信似乎也通过了,不过在深圳,鼠鼠也不是很想去。其它还有一些公司应该陆陆续续还有一些面试,现在有些纠结是直接签了还是再等再面呢?大佬们能不能给鼠鼠提一些意见,万分感谢!!!
牛客78696106...:浪潮可不是开摆,当初我还是开发的时候我组长跟我说他们组有段时间天天1,2点走,早上5点就来,全组肝出来心肌炎,浪潮挣钱省立花可不是说说,当然也看部门,但是浪潮普遍就那dio样,而且你算下时薪就知道不高,没事也是9点半走,不然算你旷工
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
迷茫的大四🐶:现在是幻想时间查看图片
双非本科的出路是什么?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务