题解 | #24点运算#

24点运算

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static Map<String, Integer> map = new HashMap<String, Integer>() {{
        put("3", 3);
        put("4", 4);
        put("5", 5);
        put("6", 6);
        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);
        put("2", 2);
    }};
    static String[] cards = new String[4];
    static boolean[] visited = new boolean[4];
    static String[] nums = new String[4];
    static String[] flag = new String[4];
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别

        boolean hasJoker = false;
        for (int i = 0; i < 4; i++) {
            cards[i] = in.next();

            if ("joker".equals(cards[i]) || "JOKER".equals(cards[i])) {
                hasJoker = true;
            }
        }

        if (hasJoker) {
            System.out.println("ERROR");
            return;
        }
        boolean f = false;
        for (int i = 0; i < 4; i++) {
            visited[i] = true;
            nums[0] = cards[i];

            if (dfs(1, map.get(cards[i]))) {
                f = true;
                break;
            }
            visited[i] = false;
        }
        if (f) {
            System.out.println(nums[0] + flag[1] + nums[1] + flag[2] + nums[2] + flag[3] + nums[3]);
        } else {
            System.out.println("NONE");
        }
    }

    static boolean dfs(int useNum, double result) {
        if (useNum == 4) {
            if (result == 24) {
                return true;
            }
        } else {
            for (int i = 0; i < 4; i++) {
                if (!visited[i]) {
                    visited[i] = true;
                    nums[useNum] = cards[i];

                    flag[useNum] = "+";
                    if (dfs(useNum + 1, result + map.get(cards[i]))) return true;
                    flag[useNum] = "-";
                    if (dfs(useNum + 1, result - map.get(cards[i]))) return true;
                    flag[useNum] = "*";
                    if (dfs(useNum + 1, result * map.get(cards[i]))) return true;
                    flag[useNum] = "/";
                    if (dfs(useNum + 1, result / map.get(cards[i]))) return true;
                    visited[i] = false;
                }
            }
        }

        return false;
    }

}

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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