题解 | #24点运算#

24点运算

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

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    private static String RESULT;
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        // while (in.hasNextInt()) { // 注意 while 处理多个 case
        //     int a = in.nextInt();
        //     int b = in.nextInt();
        //     System.out.println(a + b);
        // }
        String line = in.nextLine();
        if (line.contains("joker") || line.contains("JOKER")) {
            System.out.print("ERROR");
            return;
        }
        String[] ss = line.split(" ");
        int[] arr = new int[4];
        for (int i = 0; i < 4; i++) {
            if ("J".equals(ss[i])) {
                arr[i] = 11;
            } else if ("Q".equals(ss[i])) {
                arr[i] = 12;
            } else if ("K".equals(ss[i])) {
                arr[i] = 13;
            } else if ("A".equals(ss[i])) {
                arr[i] = 1;
            } else {
                arr[i] = Integer.parseInt(ss[i]);
            }
        }
        for (int i = 0; i < 4; i++) {
            boolean[] visited = new boolean[4];
            visited[i] = true;
            String resultStr = ss[i];
            if (dfs(ss, arr, i, arr[i], visited, resultStr)) {
                System.out.print(RESULT);
                return;
            }
        }
        System.out.print("NONE");
    }
    private static boolean dfs(String[] ss, int[] arr, int index, int result,
                               boolean[] visited, String resultStr) {
        visited[index] = true;
        boolean visiteAll = true;
        for (int i = 0; i < 4; i++) {
            if (!visited[i]) {
                visiteAll = false;
            }
        }
        if (visiteAll && result != 24) {
            return false;
        } else if (visiteAll && result == 24) {
            RESULT = resultStr;
            return true;
        }

        for (int i = 0; i < 4; i++) {
            if (!visited[i]) {
                if (dfs(ss, arr, i, result + arr[i], visited,
                        resultStr + "+" + ss[i])) {
                    return true;
                } else {
                    visited[i] = false;
                }
                if (dfs(ss, arr, i, result - arr[i], visited,
                        resultStr + "-" + ss[i])) {
                    return true;
                } else {
                    visited[i] = false;
                }
                if (dfs(ss, arr, i, result * arr[i], visited,
                        resultStr + "*" + ss[i])) {
                    return true;
                } else {
                    visited[i] = false;
                }
                if (dfs(ss, arr, i, result / arr[i], visited,
                        resultStr + "/" + ss[i])) {
                    return true;
                } else {
                    visited[i] = false;
                }
            }
        }
        return false;
    }
}

全部评论

相关推荐

10-15 20:01
已编辑
上海大学 Java
钉钉什么垃圾公司,约面鸽人
光年在眼前:不是坏事,感觉钉钉挺逆天的,二面结束还给我留作业,让我使用钉钉和看最新的发布会,然后说感受,我是应该不会去,三面直接拒绝不面了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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