题解 | #24点运算#

24点运算

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

import java.util.*;

// 成就感不就来了吗
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String s = in.nextLine();
        if (s.contains("joker") || s.contains("JOKER")) {
            System.out.println("ERROR");
            return;
        }
        Map<String, Integer> map = new HashMap<String, Integer>() {
            {
                put("A", 1);
                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);
            }
        };
        String[] ss = s.split(" ");
        int[] c = new int[4];
        boolean[] b = new boolean[4];
        String sb = new String();
        for (int i = 0; i < 4; i++) {
            c[i] = map.get(ss[i]);
            b[i] = false;
        }
        if (!dfs24(ss, c, 0, b, 0, sb)) {
            System.out.println("NONE");
        }
    }



    public static boolean dfs24(String[] ss, int[] c, int count, boolean[] b,
                                int num, String sb) {
        if (num < 4) {
            for (int i = 0; i < 4; i++) {
                if (!b[i]) {
                    b[i] = true;
                    num++;
                    if (num == 1) {
                        if (dfs24(ss, c, count + c[i], b, num, sb + ss[i])) {
                            return true;
                        }
                    } else if (num == 4) {
                        if (count + c[i] == 24) {
                            sb += "+" + ss[i];
                            System.out.println(sb);
                            return true;
                        } else if (count - c[i] == 24) {
                            sb += "-" + ss[i];
                            System.out.println(sb);
                            return true;
                        } else if (count * c[i] == 24) {
                            sb += "*" + ss[i];
                            System.out.println(sb);
                            return true;
                        } else if (count / c[i] == 24) {
                            sb += "/" + ss[i];
                            System.out.println(sb);
                            return true;
                        }
                    } else {
                        if (dfs24(ss, c, count + c[i], b, num, sb + "+" + ss[i]) ||
                                dfs24(ss, c, count - c[i], b, num, sb + "-" + ss[i]) ||
                                dfs24(ss, c, count * c[i], b, num, sb + "*" + ss[i]) ||
                                dfs24(ss, c, count / c[i], b, num, sb + "/" + ss[i])) {
                            return true;
                        }
                    }
                } else {
                    continue;
                }
                num--;
                b[i] = false;

            }
        }
        return false;
    }
}

全部评论

相关推荐

面了100年面试不知...:太礼貌,还是
点赞 评论 收藏
分享
牛客83265014...:完了,连现在都没开始面,13号投的是不是晚了
秋招的第一个offer,...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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