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

全部评论

相关推荐

什么时候才能有offer啊_:十年前我还在刺激战场研究跳伞的底层原理呢
投递牛客等公司
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务