题解 | #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; } }