题解 | #24点运算#
24点运算
https://www.nowcoder.com/practice/7e124483271e4c979a82eb2956544f9d
import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String s = in.nextLine().replaceAll(" ", "");
String[] signs = {"+", "-", "*", "/"};
String s1 = new String();
if (s.contains("joker") || s.contains("JOKER")) {
System.out.print("ERROR");
} else {
for (String ss : allSort(s)) {
for (int j = 0; j < 4; j++) {
for (int k = 0; k < 4; k++) {
for (int l = 0; l < 4; l++) {
String s2 = ss.substring(0, 1) + signs[j] + ss.substring(1,2) + signs[k] + ss.substring(2, 3) + signs[l] + ss.substring(3);
if (isTwentyF(s2)) {
s1 = s2;
break;
}
}
if (!s1.isEmpty()) break;
}
if (!s1.isEmpty()) break;
}
if (!s1.isEmpty()) break;
}
if (s1.isEmpty()) {
System.out.print("NONE");
} else {
System.out.print(s1);
}
}
}
static boolean isTwentyF(String s) {
char[] chs = s.toCharArray();
int sum = 0;
int num = 0;
char sign = '+';
for (int i = 0; i < chs.length; i++) {
if (Character.isDigit(chs[i])) {
num = chs[i] - '0';
} else if (Character.isLetter(chs[i])) {
if (chs[i] == 'A') num = 1;
else if (chs[i] == 'J') num = 11;
else if (chs[i] == 'Q') num = 12;
else if (chs[i] == 'K') num = 13;
}
if(!Character.isDigit(chs[i])||i == chs.length - 1){
if (sign == '+') sum = sum + num;
else if (sign == '-') sum = sum - num;
else if (sign == '*') sum = sum * num;
else if (sign == '/') sum = sum / num;
num = 0;
sign = chs[i];
}
}
if (sum == 24) {
return true;
} else {
return false;
}
}
static HashSet<String> allSort(String s) {
HashSet<String> set = new HashSet<String>();
if (s.length() == 0) {
set.add("");
return set;
}
String fnum = s.substring(0, 1);
String remnum = s.substring(1);
for (String ss : allSort(remnum)) {
for (int i = 0; i <= ss.length(); i++) {
StringBuffer sb = new StringBuffer(ss);
set.add(sb.insert(i, fnum).toString());
}
}
return set;
}
}
滴滴公司福利 1772人发布
查看8道真题和解析