题解 | 24点游戏算法

24点游戏算法

https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb

import java.util.*;

public class Main {
    static final double EPS = 1e-6;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        double[] v = new double[4];
        for (int i = 0; i < 4; i++) v[i] = in.nextDouble();
        char[] ops = {'+', '-', '*', '/'};
        for (int i = 0; i < 4; i++)
        for (int j = 0; j < 4; j++) if (j != i)
        for (int k = 0; k < 4; k++) if (k != i && k != j)
        for (int l = 0; l < 4; l++) if (l != i && l != j && l != k) {
            for (char o1 : ops) for (char o2 : ops) for (char o3 : ops) {
                double a = v[i], b = v[j], c = v[k], d = v[l];
                double[] vals = new double[] {
                    calc(calc(calc(a,o1,b),o2,c),o3,d),
                    calc(calc(a,o1,calc(b,o2,c)),o3,d),
                    calc(a,o1,calc(calc(b,o2,c),o3,d)),
                    calc(a,o1,calc(b,o2,calc(c,o3,d))),
                    calc(calc(a,o1,b),o2,calc(c,o3,d))
                };
                for (double r : vals) {
                    if (!Double.isNaN(r) && Math.abs(r-24) < EPS) {
                        System.out.println("true");
                        return;
                    }
                }
            }
        }
        System.out.println("false");
    }
    static double calc(double x, char op, double y) {
        switch (op) {
            case '+': return x + y;
            case '-': return x - y;
            case '*': return x * y;
            case '/': return Math.abs(y) > EPS ? x / y : Double.NaN;
        }
        return Double.NaN;
    }
}

全部评论

相关推荐

05-19 15:21
已编辑
华南农业大学 Java
白火同学:你才沟通了200,说实话,北上广深杭这里面你连一座城市的互联网公司都没投满呢,更别说还有各种准一线二线城市了。等你沟通突破了三位数,还没结果再考虑转行的事吧。
点赞 评论 收藏
分享
湫湫湫不会java:先投着吧,大概率找不到实习,没实习的时候再加个项目,然后把个人评价和荣誉奖项删了,赶紧成为八股战神吧,没实习没学历,秋招机会估计不多,把握机会。或者说秋招时间去冲实习,春招冲offer,但是压力会比较大
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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