题解 | #24点游戏算法#
24点游戏算法
https://www.nowcoder.com/practice/fbc417f314f745b1978fc751a54ac8cb
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int[] nums = new int[4];
for(int i = 0; i < 4; i++) {
nums[i] = in.nextInt();
}
boolean res = dfs(nums);
System.out.println(res);
}
}
public static boolean dfs(int[] nums) {
for(int i = 0; i < nums.length; i++){
int[] newNums = new int[nums.length - 1];
for(int j = 0, k = 0; j < nums.length; j++) {
if(i != j) {
newNums[k++] = nums[j];
}
}
boolean res = dfs(nums[i], newNums);
if(res) {
return true;
}
}
return false;
}
public static boolean dfs(int res, int[] nums) {
if(nums.length == 0) {
return res == 24;
}
for(int i = 0; i < nums.length; i++) {
int[] newNums = new int[nums.length - 1];
for(int j = 0, k = 0; j < nums.length; j++) {
if(i != j) {
newNums[k++] = nums[j];
}
}
if(dfs(res * nums[i], newNums)) {
return true;
}
if(dfs(res + nums[i], newNums)) {
return true;
}
if(res % nums[i] == 0 && dfs(res / nums[i], newNums)) {
return true;
}
if(dfs(res - nums[i], newNums)) {
return true;
}
}
return false;
}
}
查看9道真题和解析