题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
把握住几个点:
1、 每一个数字只能被用一次;2、除法可能存在不能整除的情况,所以要做取余计算,只有能整除的才能继续,否则结果可能不准;3、题目中数字总共只有4个,每一个的范围为1<=n<=10,故可不考虑被除数为0的情况,只要输入的时候加了判断即可。
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
// 输入4个参数
int[] iptNums = new int[4];
for (int i = 0; i < 4; i++) {
iptNums[i] = in.nextInt();
}
int[] visit = new int[4];
System.out.println(dfs(0, iptNums, visit, 0));
}
}
private static boolean dfs(int index, int[] iptNums, int[] visit, int result) {
if (index == 4) {
if (result == 24) {
return true;
}
return false;
}
for (int i = 0; i < 4; i++) {
if (visit[i] == 0) {
visit[i] = 1;
if (dfs( index + 1, iptNums, visit,result + iptNums[i])
|| dfs( index + 1, iptNums, visit,result - iptNums[i])
|| dfs( index + 1, iptNums, visit,result * iptNums[i])
|| (result % iptNums[i] == 0 && dfs( index + 1, iptNums, visit,result / iptNums[i]))) {
return true;
}
visit[i] = 0;
}
}
return false;
}

