题解 | #24点运算#

24点运算

https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    private static boolean exist = false;

    private static Map<String, Integer> map = new HashMap<String, Integer>() {
        {
            put("2", 2);
            put("3", 3);
            put("4", 4);
            put("5", 5);
            put("6", 6);
            put("7", 7);
            put("8", 8);
            put("9", 9);
            put("10", 10);
            put("J", 11);
            put("Q", 12);
            put("K", 13);
            put("A", 1);
        }
    };

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        if (str.toLowerCase().contains("joker")) {
            System.out.println("ERROR");
            return;
        }
        String[] nums = str.split(" ");
        boolean[] used = new boolean[4];
        dfs("", nums, used, 0, 0);
        if (!exist) {
            System.out.println("NONE");
        }
    }

    private static void dfs(String res, String[] nums, boolean[] used, int target,
                            int index) {
        if (index == 4) {
            if (target == 24) {
                exist = true;
                System.out.println(res);
            }
            return;
        }

        for (int i = 0; i < 4; i++) {
            if (!used[i]) {
                used[i] = true;

                if (index == 0) {
                    dfs(res + nums[i], nums, used, map.get(nums[i]), index + 1);
                    dfs(res + nums[i], nums, used, map.get(nums[i]), index + 1);
                    dfs(res + nums[i], nums, used, map.get(nums[i]), index + 1);
                    dfs(res + nums[i], nums, used, map.get(nums[i]), index + 1);
                } else {
                    dfs(res + "+" + nums[i], nums, used, target + map.get(nums[i]), index + 1);
                    dfs(res + "-" + nums[i], nums, used, target - map.get(nums[i]), index + 1);
                    dfs(res + "*" + nums[i], nums, used, target * map.get(nums[i]), index + 1);
                    dfs(res + "/" + nums[i], nums, used, target / map.get(nums[i]), index + 1);
                }

                used[i] = false;
            }
        }
    }
}

全部评论

相关推荐

牛客41406533...:回答他在课上学,一辈子待在学校的老教授用三十年前的祖传PPT一字一句的讲解,使用谭浩强红皮书作为教材在devc++里面敲出a+++++a的瞬间爆出114514个编译错误来学这样才显得专业
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务