递归遍历4张牌,进行加减乘除
import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static int result;
public static List<Integer> list = new ArrayList<>();
public static List<String> listResult = new ArrayList<>();
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("2", 2);
map.put("3", 3);
map.put("4", 4);
map.put("5", 5);
map.put("6", 6);
map.put("7", 7);
map.put("8", 8);
map.put("9", 9);
map.put("10", 10);
map.put("J", 11);
map.put("Q", 12);
map.put("K", 13);
map.put("joker", -1);
map.put("JOKER", -2);
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextLine()) { // 注意 while 处理多个 case
String[] a = in.nextLine().split(" ");
int[] syr = new int[4];
for (int i = 0; i < 4; i++) {
if (map.getOrDefault(a[i], -1) < 0) {
System.out.println("ERROR");
return;
}
syr[i] = map.get(a[i]);
}
StringBuffer sb = new StringBuffer();
boolean[] isvisit = new boolean[4];
Arrays.fill(isvisit, true);
find24(syr, sb, isvisit, 0, 0);
System.out.println(listResult.size() == 0 ? "NONE" : listResult.get(0));
}
}
public static void find24(int[] syr, StringBuffer sb, boolean[] isvisit, int result, int count) {
Map<Integer, String> StrMap = new HashMap<>();
StrMap.put(1, "A");
StrMap.put(2, "2");
StrMap.put(3, "3");
StrMap.put(4, "4");
StrMap.put(5, "5");
StrMap.put(6, "6");
StrMap.put(7, "7");
StrMap.put(8, "8");
StrMap.put(9, "9");
StrMap.put(10, "10");
StrMap.put(11, "J");
StrMap.put(12, "Q");
StrMap.put(13, "K");
if (count == 4 && result == 24) {
listResult.add(sb.toString());
list.add(result);
return;
}
for (int i = 0; i < 4; i++) {
if (count == 0) {
result = syr[i];
isvisit[i] = false;
sb.append(StrMap.get(syr[i]));
find24(syr, sb, isvisit, result, count + 1);
result = result - syr[i];
sb.delete(0, sb.length());
isvisit[i] = true;
} else if (isvisit[i]) {
isvisit[i] = false;
int sbLength = sb.length();
result = result + syr[i];
sb.append("+").append(StrMap.get(syr[i]));
find24(syr, sb, isvisit, result, count + 1);
result = result - syr[i];
sb.delete(sbLength, sb.length());
result = result - syr[i];
sb.append("-").append(StrMap.get(syr[i]));
find24(syr, sb, isvisit, result, count + 1);
result = result + syr[i];
sb.delete(sbLength, sb.length());
result = result * syr[i];
sb.append("*").append(StrMap.get(syr[i]));
find24(syr, sb, isvisit, result, count + 1);
result = result / syr[i];
sb.delete(sbLength, sb.length());
if (result % syr[i] == 0) {
result = result / syr[i];
sb.append("/").append(StrMap.get(syr[i]));
find24(syr, sb, isvisit, result, count + 1);
result = result * syr[i];
sb.delete(sbLength, sb.length());
}
isvisit[i] = true;
}
}
}
}