题解 | 24点运算

24点运算

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

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
#include <map>
int calRes(char c, int a, int b) {

    switch (c) {
        case '/':
            return a / b;
        case '+':
            return a + b;
        case '-':
            return a - b;
        case '*':
            return a * b;
        default:
            return -1;
            break;
    }
    return 0;
};
char rep(int n, map<int, char>mm) {
    if (n >= 2 && n <= 10) return n + '0';
    else return mm[n];
}

int main() {
    string s;
    char c;
    vector<int> vv;
    string ss = "+-*/";
    map<int, char>mm;
    mm[1] = 'A';
    mm[11] = 'J';
    mm[12] = 'Q';
    mm[13] = 'K';

    // cout << ss[3] << endl;
    int res = 0;
    while (cin >> s) { // 注意 while 处理多个 case
        if (s.size() > 3) {
            cout << "ERROR";
            return 0;
        }
        if (s == "10") {
            vv.push_back(10);
        }
        c = s[0];
        if (c >= '0' && c <= '9')vv.push_back(c - '0');
        else if (c == 'A') vv.push_back(1);
        else if (c == 'J') vv.push_back(11);
        else if (c == 'Q') vv.push_back(12);
        else if (c == 'K') vv.push_back(13);
    }
    for (int i = 0; i < ss.size(); i++) {
        for (int j = 0; j < ss.size(); j++) {
            for (int k = 0; k < ss.size(); k++) {
                for (int l =0; l <vv.size();l++){
                    for(int m=0;m<vv.size();m++){
                        for(int o=0;o<vv.size();o++){
                            for(int r=0;r<vv.size();r++){

                                if(l==m || l==o || l==r || m ==o || m == r || o==r) continue;

                                res = calRes(ss[i], vv[l], vv[m]);
                                res = calRes(ss[j], res, vv[o]);
                                res = calRes(ss[k], res, vv[r]);
                                if (res == 24) {
                                    cout << rep(vv[l], mm) << ss[i] << rep(vv[m], mm) << ss[j] << rep(vv[o],
                                            mm) << ss[k] << rep(vv[r], mm) << endl;
                                    //return 0;
                                }

                            }
                        }
                    }
                }
            }
        }
    }
    cout << "NONE";
    return 0;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

05-20 21:57
已编辑
门头沟学院 Java
喜欢吃卤蛋的悲伤蛙在提需求:建信融通没消息吧,我2说有实习挂简历不理了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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