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