这个题确实有点难哦,把输出的4个数字的全部排列找出来,对每一个排列中的4个数,中间有3个计算符,都从+ - * /四种运算中循环选取一种来计算,如果结果是24就返回,全部循环结束还没有结果,那就是不可能得到,输出NONE。能把这个题做出来,我真是有点开心啊,哈哈。
运行时间:14ms超过97.78% 用Java提交的代码
占用内存:9668KB超过94.18%用Java提交的代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        //3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
        String[] poker = {"", "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"};
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        String[] s1 = s.split(" ");
        int[] data = new int[4];
        for (int i = 0; i < s1.length; i++) {
            String t = s1[i];
            if ("joker".equals(t) || "JOKER".equals(t)) {
                System.out.println("ERROR");
                return;
            }
            switch (t) {
                case "J":
                    data[i] = 11;
                    break;
                case "Q":
                    data[i] = 12;
                    break;
                case "K":
                    data[i] = 13;
                    break;
                case "A":
                    data[i] = 1;
                    break;
                default:
                    data[i] = Integer.parseInt(t);
            }
        }
        String[] op = {"+", "-", "*", "/"};
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data.length; j++) {
                for (int k = 0; k < data.length; k++) {
                    for (int l = 0; l < data.length; l++) {
                        if (i == j || i == k || i == l || j == k || j == l || k == l) {
                            continue;
                        }
                        int[] target = {data[i], data[j], data[k], data[l]};
                        for (int a = 0; a < op.length; a++) {
                            for (int b = 0; b < op.length; b++) {
                                for (int c = 0; c < op.length; c++) {
                                    String op1 = op[a];
                                    int result = compute(target[0], target[1], op1);
                                    String op2 = op[b];
                                    result = compute(result, target[2], op2);
                                    String op3 = op[c];
                                    result = compute(result, target[3], op3);
                                    if (result == 24) {
                                        System.out.println(poker[target[0]] + op1 + poker[target[1]] + op2 + poker[target[2]] + op3 + poker[target[3]]);
                                        return;
                                    }

                                }
                            }
                        }
                    }
                }
            }
        }
        System.out.println("NONE");
    }

    public static int compute(int a, int b, String op) {
        switch (op) {
            case "+":
                return a + b;
            case "-":
                return a - b;
            case "*":
                return a * b;
            case "/":
                return a / b;
        }

        return -1;
    }
}