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

相关推荐

06-13 17:33
门头沟学院 Java
顺序不记了,大致顺序是这样的,有的相同知识点写分开了1.基本数据类型2.基本数据类型和包装类型的区别3.==和equals区别4.ArrayList与LinkedList区别5.hashmap底层原理,put操作时会发生什么6.说出几种树型数据结构7.B树和B+树区别8.jvm加载类机制9.线程池核心参数10.创建线程池的几种方式11.callable与runnable区别12.线程池怎么回收线程13.redis三剑客14.布隆过滤器原理,不要背八股,说说真正使用时遇到了问题没有(我说没有,不知道该怎么回答了)15.堆的内存结构16.自己在写项目时有没有遇见过oom,如何处理,不要背八股,根据真实经验,我说不会17.redis死锁怎么办,watchdog机制如何发现是否锁过期18.如何避免redis红锁19.一个表性别与年龄如何加索引20.自己的项目的QPS怎么测的,有没有真正遇到大数量表21.说一说泛型22.springboot自动装配原理23.springmvc与springboot区别24.aop使用过嘛?动态代理与静态代理区别25.spring循环依赖怎么解决26.你说用过es,es如何分片,怎么存的数据,1000万条数据怎么写入库中27.你说用limit,那么在数据量大之后,如何优化28.rabbitmq如何批次发送,批量读取,答了延迟队列和线程池,都不对29.计网知不知道smtp协议,不知道写了对不对,完全听懵了30.springcloud知道嘛?只是了解反问1.做什么的?短信服务,信息量能到千万级2.对我的建议,基础不错,但是不要只背八股,多去实际开发中理解。面试官人不错,虽然没露脸,但是中间会引导我回答问题,不会的也只是说对我要求没那么高。面完问我在济宁生活有没有困难,最快什么时候到,让人事给我聊薪资了。下午人事打电话,问我27届的会不会跑路,还在想办法如何使我不跑路,不想扣我薪资等。之后我再联系吧,还挺想去的😭,我真不跑路哥😢附一张河科大幽默大专图,科大就是大专罢了
查看30道真题和解析
点赞 评论 收藏
分享
评论
6
收藏
分享

创作者周榜

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