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

全部评论

相关推荐

鬼迹人途:你去投一投尚游游戏,服务器一面,第一个图算法,做完了给你一个策略题,你给出方案他就提出低概率问题,答不上当场给你挂
点赞 评论 收藏
分享
抱抱碍事梨a:三点建议,第一点是建议再做一个项目,把自我介绍部分顶了,第二点是中南大学加黑加粗,第三点是建议加v详细交流
点赞 评论 收藏
分享
05-28 23:26
河南大学 Java
双非本,刚学完Redis,项目只有外卖和点评,八股没准备,算法只有lqb省一,感觉敲的项目也是一言难尽没怎么吸收。怎么你们都有实习了
大牛之途:27急个锤子,你投日常实习最好的时间就是9,10月份,那时候暑期实习都结束了,正是缺人的时候。这份日常又能给你的暑期实习增加竞争力,暑期找的好了秋招也不怕了,都是环环相扣的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务