题解 | #扑克牌大小#
扑克牌大小
https://www.nowcoder.com/practice/d290db02bacc4c40965ac31d16b1c3eb
import java.util.Scanner; import java.util.*; // 繁杂的业务处理题,伤神又伤身,t_t public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); while (in.hasNextLine()) { String poker = in.nextLine(); System.out.println(compare(poker)); } } public static String compare(String poker) { String[] s = poker.split("-"); String poker1 = s[0], poker2 = s[1]; int[] p1 = change(poker1), p2 = change(poker2); if (p1[0] == p2[0]) { return p1[1] > p2[1] ? poker1 : poker2; } else if (p1[0] == 6 || p1[0] == 4 && p2[0] != 4 && p2[0] != 6) { return poker1; } else if (p2[0] == 6 || p2[0] == 4 && p1[0] != 4 && p1[0] != 6) { return poker2; } else { return "ERROR"; } } public static int[] change(String poker_) { //type: 1 一个或多个单个, 2 对子, 3 三个, 4 炸弹, 5 顺子, 6 王炸 String[] poker = poker_.split(" "); int type[] = new int[2]; int n = poker.length; if (n == 1) { type[0] = 1; type[1] = map.get(poker[0]); } else if (n == 2) { if (poker[0].equals(poker[1])) { type[0] = 2; type[1] = map.get(poker[1]); } else if (poker[0].equals("JOKER") && poker[1].equals("joker") || poker[1].equals("JOKER") && poker[0].equals("joker")) { type[0] = 6; type[1] = 16; } else { int max = map.get(poker[0]) > map.get(poker[1]) ? map.get(poker[0]) : map.get(poker[1]); type[0] = 1; type[1] = max; } } else if (n == 3) { if (poker[0].equals(poker[1]) && poker[2].equals(poker[1])) { type[0] = 3; type[1] = map.get(poker[0]); } else { int pre = move(poker, 0, 3); type[0] = 1; type[1] = pre; } } else if (n == 4) { if (poker[0].equals(poker[1]) && poker[1].equals(poker[2]) && poker[2].equals(poker[3])) { type[0] = 4; type[1] = map.get(poker[0]); } else { int pre = move(poker, 0, 4); type[0] = 1; type[1] = pre; } } else if (n >= 5) { int pre = map.get(poker[0]); int off = 1; while (off < n) { if (map.get(poker[off]) == pre + 1) { pre = map.get(poker[off]); off++; } else { break; } } if (off == n) { type[0] = 5; type[1] = map.get(poker[0]); } else { int pre2 = move(poker, 0, n); type[0] = 1; type[1] = pre2; } } return type; } public static move(String[] poker, int l, int r) { int pre = map.get(poker[l]); for (int i = 1; i < r; i++) { if (pre < map.get(poker[i])) { pre = map.get(poker[i]); } } return pre; } static HashMap<String, Integer> map; static { map = new HashMap<String, Integer>(); map.put("3", 1); map.put("4", 2); map.put("5", 3); map.put("6", 4); map.put("7", 5); map.put("8", 6); map.put("9", 7); map.put("10", 8); map.put("J", 9); map.put("Q", 10); map.put("K", 11); map.put("A", 12); map.put("2", 13); map.put("joker", 14); map.put("JOKER", 15); } }