题解 | #24点运算# 多层for循环解决

24点运算

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

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        scanner.close();
        String[] strs = input.split(" ");
        int[] nums = new int[4];
        HashMap<Integer, Character> map = new HashMap<>();
        map.put(11, 'J');
        map.put(12, 'Q');
        map.put(13, 'K');
        map.put(1, 'A');
        for (int i = 0; i < 4; i++) {
            if (strs[i].equals("joker") || strs[i].equals("JOKER")) {
                System.out.println("ERROR");
                return;
            }
            if (strs[i].equals("A")) {
                nums[i] = 1;
            } else if (strs[i].equals("J")) {
                nums[i] = 11;
            } else if (strs[i].equals("Q")) {
                nums[i] = 12;
            } else if (strs[i].equals("K")) {
                nums[i] = 13;
            } else {
                nums[i] = Integer.valueOf(strs[i]);
            }
        }
        boolean flag = false;
        char[] ops = {'+', '-', '*', '/'};
        for (int i = 0; i < 4; i++) {
            for (int j = 0; j < 4; j++) {
                if (i == j) {
                    continue;
                }
                for (int k = 0; k < 4; k++) {
                    if (k == i || k == j) {
                        continue;
                    }
                    for (int l = 0; l < 4; l++) {
                        if (l == i || l == j || l == k) {
                            continue;
                        }
                        for (int x = 0; x < 4; x++) {
                            for (int y = 0; y < 4; y++) {
                                for (int z = 0; z < 4; z++) {
                                    int num1 = nums[i];
                                    int num2 = nums[j];
                                    int num3 = nums[k];
                                    int num4 = nums[l];
                                    char op1 = ops[x];
                                    char op2 = ops[y];
                                    char op3 = ops[z];
                                    if (op1 == '/' && num1 % num2 != 0) {
                                        continue;
                                    }
          

                                    int res1 = calculate(num1, num2, op1);
                                    int res2 = calculate(res1, num3, op2);
                                    int res3 = calculate(res2, num4, op3);
                                    if (res3 == 24) {
                                        System.out.println(getString(num1, map) + op1 + getString(num2, map)
                                                + op2 + getString(num3, map) + op3 + getString(num4, map));
                                        flag = true;
                                        break;
                                    }
                                }
                                if (flag) {
                                    break;
                                }
                            }
                            if (flag) {
                                break;
                            }
                        }
                        if (flag) {
                            break;
                        }
                    }
                    if (flag) {
                        break;
                    }
                }
                if (flag) {
                    break;
                }
            }
            if (flag) {
                break;
            }
        }
        if (!flag) {
            System.out.println("NONE");
        }
    }

    private static int calculate(int num1, int num2, char op) {
        if (op == '+') {
            return num1 + num2;
        } else if (op == '-') {
            return num1 - num2;
        } else if (op == '*') {
            return num1 * num2;
        } else {
            return num1 / num2;
        }
    }

    private static String getString(int num, HashMap<Integer, Character> map) {
        if (num == 1) {
            return "A";
        } else if (num <= 10) {
            return String.valueOf(num);
        } else {
            return String.valueOf(map.get(num));
        }
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务