题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
static Map<String, Integer> map = new HashMap<String, Integer>() {{
put("3", 3);
put("4", 4);
put("5", 5);
put("6", 6);
put("6", 6);
put("7", 7);
put("8", 8);
put("9", 9);
put("10", 10);
put("J", 11);
put("Q", 12);
put("K", 13);
put("A", 1);
put("2", 2);
}};
static String[] cards = new String[4];
static boolean[] visited = new boolean[4];
static String[] nums = new String[4];
static String[] flag = new String[4];
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
boolean hasJoker = false;
for (int i = 0; i < 4; i++) {
cards[i] = in.next();
if ("joker".equals(cards[i]) || "JOKER".equals(cards[i])) {
hasJoker = true;
}
}
if (hasJoker) {
System.out.println("ERROR");
return;
}
boolean f = false;
for (int i = 0; i < 4; i++) {
visited[i] = true;
nums[0] = cards[i];
if (dfs(1, map.get(cards[i]))) {
f = true;
break;
}
visited[i] = false;
}
if (f) {
System.out.println(nums[0] + flag[1] + nums[1] + flag[2] + nums[2] + flag[3] + nums[3]);
} else {
System.out.println("NONE");
}
}
static boolean dfs(int useNum, double result) {
if (useNum == 4) {
if (result == 24) {
return true;
}
} else {
for (int i = 0; i < 4; i++) {
if (!visited[i]) {
visited[i] = true;
nums[useNum] = cards[i];
flag[useNum] = "+";
if (dfs(useNum + 1, result + map.get(cards[i]))) return true;
flag[useNum] = "-";
if (dfs(useNum + 1, result - map.get(cards[i]))) return true;
flag[useNum] = "*";
if (dfs(useNum + 1, result * map.get(cards[i]))) return true;
flag[useNum] = "/";
if (dfs(useNum + 1, result / map.get(cards[i]))) return true;
visited[i] = false;
}
}
}
return false;
}
}