题解 | #24点运算#

24点运算

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

import java.util.*;


public class Main {
    public static void main(String []args) {
        Scanner sc = new Scanner(System.in);
        String a = sc.next();
        String b = sc.next();
        String c = sc.next();
        String d = sc.next();
        if (joker(a) || joker(b) || joker(c) || joker(d)) {
            System.out.println("ERROR");
            return;
        }
        calc(a, b, c, d);
    }

    //4*3*2*1 种数字排列
    public static void calc(String a, String b, String c, String d) {
        int [] arr = {getNum(a), getNum(b), getNum(c), getNum(d)};
        StringBuilder sb = new StringBuilder();
        boolean flat = false;
        for (int i = 0; i < 4; i++) {
            if (flat)break;
            for (int j = 0; j < 4; j++) {
                if (j == i)continue;
                if (flat)break;
                for (int m = 0; m < 4; m++) {
                    if (m == i || m == j)continue;
                    if (flat)break;
                    for (int n = 0; n < 4; n++) {
                        if (n == i || n == j || n == m)continue;
                        sb = new StringBuilder();
                        flat = test(sb, arr[i], arr[j], arr[m], arr[n]);
                        if (flat)break;
                    }
                }
            }
        }
        if (flat) {
            System.out.println(sb);
        } else {
            System.out.println("NONE");
        }
    }
    //4*4*4 种 计算符号
    public static boolean test(StringBuilder sb, int a, int b, int c, int d) {
        String [] str = {"+", "-", "*", "/"};
        boolean flat = false;
        for (String mk1 : str) {
            if (flat) break;
            for (String mk2 : str) {
                if (flat) break;
                for (String mk3 : str) {
                    int x = calc(mk1, a, b);
                    int y = calc(mk2, x, c);
                    int z = calc(mk3, y, d);
                    if (z == 24) {
                        sb.append(backStr(a)).append(mk1).append(backStr(b))
                        .append(mk2).append(backStr(c))
                        .append(mk3).append(backStr(d));
                        flat = true;
                        break;
                    }
                }
            }

        }
        return flat;
    }

    //计算
    public static int calc(String mark, int a, int b) {
        int num = 0;
        switch (mark) {
            case "+":
                num = a + b;
                break;
            case "-":
                num = a - b;
                break;
            case "*":
                num = a * b;
                break;
            case "/":
                num = a / b;
                break;
        }
        return num;

    }

    //字母转数字
    public static int getNum(String str) {
        int num = 0;
        switch (str) {
            case "A":
                num = 1;
                break;
            case "J":
                num = 11;
                break;
            case "Q":
                num = 12;
                break;
            case "K":
                num = 13;
                break;
            default:
                num =  Integer.parseInt(str);
        }
        return num;
    }
    //数字转回字母
    public static String backStr(int num) {
        String str = "";
        switch (num) {
            case 1:
                str = "A";
                break;
            case 11:
                str = "J";
                break;
            case 12:
                str = "Q";
                break;
            case 13:
                str = "K";
                break;
            default:
                str =  num + "";
        }
        return str;
    }
    //判断是否出现大小王
    public static boolean joker(String str) {
        if (str.equalsIgnoreCase("joker")) {
            return true;
        }
        return false;
    }
}
全部评论

相关推荐

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