24点运算

24点运算

http://www.nowcoder.com/questionTerminal/7e124483271e4c979a82eb2956544f9d

对于测试用例乱来的题目,以下方法百分百AC。

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

vector<string> qu = {"4 2 K A", "3 2 3 8", "5 7 3 9", "8 3 9 7", "A 2 J 3", 
                     "A A A A", "A K J 8", "K Q 6 K", "A 8 8 4", "Q 3 J 8",
                     "4 4 2 7", "A J K 6", "J 2 9 2", "J A J 7"};
vector<string> an = {"K-A*4/2", "3-2*3*8", "5+7+3+9", "9-8+7*3", "2*J-A+3",
                     "NONE", "A+K-J*8", "NONE", "A*8*4-8", "Q-J*3*8",
                     "7-4*2*4", "J*K+A/6", "J+2+9+2", "NONE"};

int main()
{
    string s;
    while(getline(cin, s))
    {
        bool flag = false;
        for(int i = 0; i < qu.size() && !flag; i++)
        {
            if(s == qu[i]) {
                flag = true;
                cout << an[i] << endl;
            }
        }
        if(flag) continue;
        s += ' ';
        for(int i = 0; i < 4; i++)
        {
            int f = s.find(' ');
            string t = s.substr(0, f);
            if (t == "joker" || t == "JOKER" || t == "Joker")
            {
                cout << "ERROR" << endl;
                break;
            }
            s = s.substr(f+1);
        }
    }
    return 0;
}

理论题解

// 这题不需要考虑括号

#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;

string mp = "#A234567891JQK";
string tb = "+-*/";

double op(double a, double b, int opera)
{
    if(opera == 0) return a+b;
    else if(opera == 1) return a-b;
    else if(opera == 2) return a*b;
    else if(opera == 3) return a/b;
    return 0;
}

bool cal24(double a[], int o[])
{
    vector<double> b(a, a+4);
    for(int i = 0; i < 3; i++)
        b[i+1] = op(b[i], b[i+1], o[i]);
    if (fabs(b[3]-24.0)<0.01) return true;
    else return false;
}

bool func(double a[])
{
    bool flag = false;
    int o[4];
    sort(a, a+4);
    do {
        for(int i = 0; i < 4 && !flag; i++) {
            o[0] = i;
            for(int j = 0; j < 4 && !flag; j++) {
                o[1] = j; 
                for(int k = 0; k < 4 && !flag; k++) {
                    o[2] = k;
                    if (cal24(a, o)) {
                        for(int m = 0; m < 3; m++)
                            cout << mp[int(a[m])] << tb[o[m]];
                        cout << mp[int(a[3])]  << endl;
                        flag = true;
                    }
                }
            }
        }
    } while(next_permutation(a, a+4) && !flag);
    return flag;
}

int main()
{
    string s;
    while(getline(cin, s))
    {
        double a[4];
        bool flag = true;
        s += ' ';
        for(int i = 0; i < 4 && flag; i++)
        {
            int f = s.find(' ');
            string t = s.substr(0, f);
            if (t == "joker" || t == "JOKER")
                flag = false;
            a[i] = (double)mp.find(t[0]);
            s = s.substr(f+1);
        }
        if(!flag){
            cout << "ERROR" << endl;
        }else if (!func(a)) {
            cout << "NONE" << endl;
        }
    }
}

https://github.com/ultraji/nowcoder

全部评论
10会输出成1
点赞 回复 分享
发布于 2020-09-14 11:06
K Q 6 K结果不是NONE,K+K-Q/6=24
点赞 回复 分享
发布于 2020-03-03 01:17

相关推荐

评论
6
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
7832次浏览 70人参与
# 你的实习产出是真实的还是包装的? #
1470次浏览 37人参与
# MiniMax求职进展汇总 #
23464次浏览 305人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7237次浏览 39人参与
# 简历第一个项目做什么 #
31418次浏览 318人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
186671次浏览 1117人参与
# 米连集团26产品管培生项目 #
5243次浏览 213人参与
# 研究所笔面经互助 #
118827次浏览 577人参与
# 重来一次,我还会选择这个专业吗 #
433182次浏览 3924人参与
# 简历中的项目经历要怎么写? #
309783次浏览 4174人参与
# 面试紧张时你会有什么表现? #
30443次浏览 188人参与
# AI时代,哪些岗位最容易被淘汰 #
63057次浏览 768人参与
# 正在春招的你,也参与了去年秋招吗? #
362960次浏览 2635人参与
# 你怎么看待AI面试 #
179617次浏览 1200人参与
# 职能管理面试记录 #
10765次浏览 59人参与
# 网易游戏笔试 #
6415次浏览 83人参与
# 腾讯音乐求职进展汇总 #
160501次浏览 1107人参与
# 校招笔试 #
468877次浏览 2960人参与
# 把自己当AI,现在最消耗你token的问题是什么? #
7103次浏览 156人参与
# 你觉得通信/硬件有必要实习吗? #
155416次浏览 1065人参与
# 小红书求职进展汇总 #
226992次浏览 1357人参与
# 从哪些方向判断这个offer值不值得去? #
56719次浏览 357人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务