题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
import java.util.*;
// 成就感不就来了吗
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s = in.nextLine();
if (s.contains("joker") || s.contains("JOKER")) {
System.out.println("ERROR");
return;
}
Map<String, Integer> map = new HashMap<String, Integer>() {
{
put("A", 1);
put("2", 2);
put("3", 3);
put("4", 4);
put("5", 5);
put("6", 6);
put("7", 7);
put("8", 8);
put("9", 9);
put("10", 10);
put("J", 11);
put("Q", 12);
put("K", 13);
}
};
String[] ss = s.split(" ");
int[] c = new int[4];
boolean[] b = new boolean[4];
String sb = new String();
for (int i = 0; i < 4; i++) {
c[i] = map.get(ss[i]);
b[i] = false;
}
if (!dfs24(ss, c, 0, b, 0, sb)) {
System.out.println("NONE");
}
}
public static boolean dfs24(String[] ss, int[] c, int count, boolean[] b,
int num, String sb) {
if (num < 4) {
for (int i = 0; i < 4; i++) {
if (!b[i]) {
b[i] = true;
num++;
if (num == 1) {
if (dfs24(ss, c, count + c[i], b, num, sb + ss[i])) {
return true;
}
} else if (num == 4) {
if (count + c[i] == 24) {
sb += "+" + ss[i];
System.out.println(sb);
return true;
} else if (count - c[i] == 24) {
sb += "-" + ss[i];
System.out.println(sb);
return true;
} else if (count * c[i] == 24) {
sb += "*" + ss[i];
System.out.println(sb);
return true;
} else if (count / c[i] == 24) {
sb += "/" + ss[i];
System.out.println(sb);
return true;
}
} else {
if (dfs24(ss, c, count + c[i], b, num, sb + "+" + ss[i]) ||
dfs24(ss, c, count - c[i], b, num, sb + "-" + ss[i]) ||
dfs24(ss, c, count * c[i], b, num, sb + "*" + ss[i]) ||
dfs24(ss, c, count / c[i], b, num, sb + "/" + ss[i])) {
return true;
}
}
} else {
continue;
}
num--;
b[i] = false;
}
}
return false;
}
}