题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
字符串记录表达式
import java.util.HashMap; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); HashMap<String, Integer> map = new HashMap<String, Integer>(13) { { 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); } }; // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String str = in.nextLine(); if (str.contains("joker") || str.contains("JOKER")) { System.out.println("ERROR"); } else { String[] cards = str.split(" "); boolean[] visited = new boolean[cards.length]; boolean flag = true; for (int i = 0; i < cards.length; i++) { visited[i] = true; if (backtrack(cards, visited, map, map.get(cards[i]), cards[i])) { flag = false; break; } visited[i] = false; } if (flag) { System.out.println("NONE"); } } } } private static boolean backtrack(String[] cards, boolean[] visited, HashMap<String, Integer> map, int res, String ans) { // 加上3个运算符 if (ans.length() == cards.length + 3 && res == 24) { System.out.println(ans); return true; } for (int i = 0; i < cards.length; i++) { if (!visited[i]) { visited[i] = true; if (backtrack(cards, visited, map, res + map.get(cards[i]), ans + "+" + cards[i]) || backtrack(cards, visited, map, res - map.get(cards[i]), ans + "-" + cards[i]) || backtrack(cards, visited, map, res * map.get(cards[i]), ans + "*" + cards[i]) || backtrack(cards, visited, map, res / map.get(cards[i]), ans + "/" + cards[i])) { return true; } visited[i] = false; } } return false; } }