题解 | 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;
    }
}

全部评论

相关推荐

04-28 22:33
已编辑
门头沟学院 C++
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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