这个题确实有点难哦,把输出的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;
}
}

京公网安备 11010502036488号