题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
import java.util.*;
import java.util.stream.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] strs = br.readLine().split(" ");
int[] arr = new int[4];
for (int i = 0; i < 4; i++) {
arr[i] = Integer.parseInt(strs[i]);
}
// 数字有4x3x2x1=24种排列方式
// 符号有4x4x4=64种排列方式
System.out.println(calc(null, arr));
}
//计算res与剩余整数arr计算的值是否满足24点,若res为null表示为初次
public static boolean calc(Double res, int[] arr) {
if (arr.length == 0) {
return res == 24;
}
for (int i = 0; i < arr.length; i++) {
int cur = arr[i];
int[] newList = getNewListRemoveI(arr, i);
if (res == null) {
if (calc(Double.valueOf(cur), newList)) {
return true;
}
} else if (calc(res + cur, newList) || calc(res - cur, newList) ||
calc(res * cur, newList) || calc(res / cur, newList)) {
return true;
}
}
return false;
}
//移除第i个值并创建新list
public static int[] getNewListRemoveI(int[] arr, int removeIndex) {
int[] newArr = new int[arr.length - 1];
int j = 0;
for (int i = 0; i < arr.length; i++) {
if (i != removeIndex) {
newArr[j++] = arr[i];
}
}
return newArr;
}
}