程序笔记   发布时间:2022-07-19  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了华为机试题 24点运算大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

简介

使用回溯 + 暴力@H_489_3@

code

#include <iostream>
#include <String>
#include <map>
#include <vector>
using namespace std;
bool flag = false;
char v[4]={'+', '-', '*', '/'};
String mm[14] = {"0", "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
int calc(char x, int a, int b){
    switch(X){
        case '+': return a+b;
        case '-': return a-b;
        case '*': return a*b;
        case '/': return b == 0 ? 1111111 : a/b;
    }
}
bool check(vector<int> &path){
    for(int j=0; j<4; j++){
        int ee = calc(v[j], path[0], path[1]);
        if(ee == 1111111) conTinue;
        for(int k=0; k<4; k++) {
            int ff = calc(v[k], ee, path[2]);
            if(ff == 1111111) conTinue;
            for(int l=0; l<4; l++){
                int gg = calc(v[l], ff, path[3]);
                if(gg == 1111111) conTinue;
                if(gg == 24) {
                    cout << mm[path[0]] << v[j] << mm[path[1]] << v[k] << mm[path[2]] << v[l] <<
                         mm[path[3]] << endl; 
                    return true;
                }
            }
        }
    }
    return false;
}
void dfs(vector<int> &v, map<int, bool> &vis, vector<int> &path){
    if(path.size() == v.size()) {
        flag = check(path);
        return;
    }
    for(int i=0; i<4; i++){
        if(flag) {
            return;
        }
        if(vis[i] == falsE) {
            vis[i] = true;
            path.push_BACk(v[i]);
            dfs(v, vis, path);
            if(flag) {
                return;
            }
            path.pop_BACk();
            vis[i] = false;
        }
    }
}
int main() {
    String a, b, c, d;
    map<String, int> m;
    m["2"] = 2;
    m["3"] = 3;
    m["4"] = 4;
    m["5"] = 5;
    m["6"] = 6;
    m["7"] = 7;
    m["8"] = 8;
    m["9"] = 9;
    m["10"] = 10;
    m["A"] = 1;
    m["J"] = 11;
    m["Q"] = 12;
    m["K"] = 13;

    int aa, bb, cc, dd;
    
    while(cin >> a >> b >> c >> d) {
        if(a == "joker" || b == "joker" || c == "joker" || d=="joker") {
            cout << "ERRORn";
            conTinue;
        }
        vector<int> vv(4);
        vv[0] = m[a];
        vv[1] = m[b];
        vv[2] = m[c];
        vv[3] = m[d];
        map<int, bool> vis;
        vector<int> path;
        dfs(vv, vis, path);
        if(!flag) cout << "NONEn";
    }
    
}

大佬总结

以上是大佬教程为你收集整理的华为机试题 24点运算全部内容,希望文章能够帮你解决华为机试题 24点运算所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。