题解 | 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;
}
}
查看5道真题和解析