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