首页 > 试题广场 >

扑克牌大小

[编程题]扑克牌大小
  • 热度指数:96430 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A、2各4张,小王1张,大王1张。牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):
3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER
输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如:4 4 4 4-joker JOKER。
请比较两手牌大小,输出较大的牌,如果不存在比较关系则输出ERROR。
基本规则:
(1)输入每手牌可能是个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种,不存在其他情况,由输入保证两手牌都是合法的,顺子已经从小到大排列;
(2)除了炸弹和对王可以和所有牌比较之外,其他类型的牌只能跟相同类型的存在比较关系(如,对子跟对子比较,三个跟三个比较),不考虑拆牌情况(如:将对子拆分成个子);
(3)大小规则跟大家平时了解的常见规则相同,个子、对子、三个比较牌面大小;顺子比较最小牌大小;炸弹大于前面所有的牌,炸弹之间比较牌面大小;对王是最大的牌;

(4)输入的两手牌不会出现相等的情况。

数据范围:字符串长度:




输入描述:

输入两手牌,两手牌之间用"-"连接,每手牌的每张牌以空格分隔,"-"两边没有空格,如 4 4 4 4-joker JOKER。



输出描述:

输出两手牌中较大的那手,不含连接符,扑克牌顺序不变,仍以空格隔开;如果不存在比较关系则输出ERROR。

示例1

输入

4 4 4 4-joker JOKER

输出

joker JOKER

来个代码少点的 理解题意是关键

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextLine()) {
            String[] strs = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2", "joker", "JOKER"};
            List pks = Arrays.asList(strs);
            String s = scan.nextLine();
            String b = s.substring(0, s.indexOf("-"));
            String f = s.substring(s.indexOf("-") + 1);
            String res = "ERROR";
            String[] bs = b.split(" ");
            String[] fs = f.split(" ");
            int blen = bs.length;
            int flen = fs.length;
            if (blen == flen) {
                res = pks.indexOf(bs[0]) > pks.indexOf(fs[0]) ? b : f;
            } else {
                if ("joker".equals(bs[0])) res = b;
                if ("joker".equals(fs[0])) res = f;
                if (!"joker".equals(bs[0]) && !"joker".equals(fs[0])) {
                    if (blen == 4) res = b;
                    if (flen == 4) res = f;
                }
            }
            System.out.println(res);
        }
    }
}
发表于 2024-04-10 22:01:38 回复(0)
import java.util.*;


public class Main {
    static String[] cs = new String[] {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2", "joker", "JOKER"};
    static Integer[] types = new Integer[] {0, 1, 2, 3, 4, 5};
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] inputs = in.nextLine().split("-");
        String input1 = inputs[0];
        String input2 = inputs[1];
        Integer type1 = getType(input1);
        Integer type2 = getType(input2);
        if ( type1 != type2 && type1 != types[4] && type2 != types[4]) {
            System.out.println("ERROR");
        } else {
            if (type1 == types[4] && type2 != types[4]) {
                System.out.println(input1);
            } else if (type1 != types[4] && type2 == types[4]) {
                System.out.println(input2);
            } else {
                Integer b1 = getBegin(input1.split(" "));
                Integer b2 = getBegin(input2.split(" "));
                if (b1 > b2) {
                    System.out.println(input1);
                } else {
                    System.out.println(input2);
                }
            }

        }

    }
    // 个子、对子、三个、炸弹(四个)和对王中 、、顺子(连续5张,已经从小到大排列)
    // 判断类型
    private static Integer getType(String mes) {
        String[] mesList = mes.split(" ");
        if (mesList.length  == 1) {
            return types[1];
        } else  if (mesList.length  == 2 && mesList[0].equals(mesList[1])) {
            return types[2];
        } else  if (mesList.length  == 3 && mesList[0].equals(mesList[1]) &&
                    mesList[1].equals(mesList[2])) {
            return types[3];
        } else  if (mesList.length  == 4 && mesList[0].equals(mesList[1]) &&
                    mesList[1].equals(mesList[2]) && mesList[2].equals(mesList[3])) {
            return types[4];
        } else  if (mesList.length  == 2 && "joker".equals(mesList[0].toLowerCase()) &&
                    "joker".equals(mesList[1].toLowerCase())) {
            return types[4];
        } else if (mesList.length  == 5 && isShun(mesList)) {
            return types[5];
        } else {
            return types[0];
        }
    }

    private static Boolean isShun(String[] mesList) {
        Integer b = getBegin(mesList);
        if (b != -1
                && cs[++b].equals(mesList[1]) && cs[++b].equals(mesList[2])
                && cs[++b].equals(mesList[3]) && cs[++b].equals(mesList[4])) {
            return true;
        } else {
            return false;
        }
    }
    private static Integer getBegin(String[] mesList) {
        Integer b = -1;
        for (int i = 0; i < cs.length; i++ ) {
            if (mesList[0].equals(cs[i])) {
                b =  i;
            }
        }
        return b;
    }
}


发表于 2023-10-23 22:22:54 回复(0)
为什么过不了用例A-10
import java.util.HashMap;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextInt()) { // 注意 while 处理多个 case
            String s = in.nextLine();
            String[] split = s.split("-");
            String[] s1 = split[0].split(" ");
            String[] s2 = split[1].split(" ");
            HashMap<String, Integer> poker = new HashMap<>();
            poker.put("3", 1);
            poker.put("4", 2);
            poker.put("5", 3);
            poker.put("6", 4);
            poker.put("7", 5);
            poker.put("8", 6);
            poker.put("9", 7);
            poker.put("10", 8);
            poker.put("J", 9);
            poker.put("Q", 10);
            poker.put("K", 11);
            poker.put("A", 12);
            poker.put("2", 13);
            if (split[0].equals("joker JOKER") || split[1].equals("joker JOKER")) {
                System.out.print("joker JOKER");
            } else if (s1.length == 4 && s2.length != 4) {
                for (String s3 : s1) {
                    System.out.println(s3);
                }
            } else if (s2.length == 4 && s1.length != 4) {
                for (String s3 : s2) {
                    System.out.println(s3);
                }
            } else if (s1.length == s2.length) {
                if (poker.get(s1[0]) > poker.get(s2[0])) {
                    for (String s3 : s1) {
                        System.out.print(s3 + " ");
                    }
                } else {
                    for (String s3 : s2) {
                        System.out.print(s3 + " ");
                    }
                }
            } else {
                System.out.print("ERROR");
            }
        }
    }
}

发表于 2023-06-30 23:22:46 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static String strToNum(String ss, boolean flag) {
        if (flag) {
            if (ss.equals("J")) {
                ss = "11";
            } else if (ss.equals("Q")) {
                ss = "12";
            } else if (ss.equals("K")) {
                ss = "13";
            } else if (ss.equals("A")) {
                ss = "14";
            } else if (ss.equals("2")) {
                ss = "15";
            } else if (ss.equals("joker")) {
                ss = "16";
            } else if (ss.equals("JOKER")) {
                ss = "17";
            }
        } else {
            if (ss.equals("11")) {
                ss = "J";
            } else if (ss.equals("12")) {
                ss = "Q";
            } else if (ss.equals("13")) {
                ss = "K";
            } else if (ss.equals("14")) {
                ss = "A";
            } else if (ss.equals("15")) {
                ss = "2";
            } else if (ss.equals("16")) {
                ss = "joker";
            } else if (ss.equals("17")) {
                ss = "JOKER";
            }
        }

        return ss;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNext()) { // 注意 while 处理多个 case
            String str = in.nextLine();
            String[] strs = str.split("\\-");
            String[] lefts = strs[0].split(" ");
            String[] rights = strs[1].split(" ");
            int nleft = lefts.length;
            int nright = rights.length;
            Stack<String> leftStack = new Stack<String>();
            for (int i = nleft - 1; i >= 0; i--) {
                String ss = lefts[i];  
                leftStack.push(strToNum(ss,true));
            }
            Stack<String> rightStack = new Stack<String>();
            for (int i = nright - 1; i >= 0; i--) {
                String ss = rights[i];
                rightStack.push(strToNum(ss,true));
            }
            String bigger = "";
            //1,左右其中一个有对王,贪心算法,先考虑最大的情况
            if ((leftStack.size() == 2 && leftStack.peek().equals("16")) ||
                    (rightStack.size() == 2 &&
                     rightStack.peek().equals("16"))) { //比较有对王情况
                bigger = "joker JOKER";
            } else if (leftStack.size() == 4 ||
                       rightStack.size() == 4) {//比较有炸弹情况
                Stack<String> temp = new Stack<String>();
                if (leftStack.size() == 4 && rightStack.size() == 4) {
                    if (Integer.parseInt(leftStack.peek()) > Integer.parseInt(rightStack.peek())) {
                        temp = leftStack;
                    } else {
                        temp = rightStack;
                    }

                } else if (leftStack.size() == 4) {
                    temp = leftStack;
                } else if (rightStack.size() == 4) {
                    temp = rightStack;
                }

                while (!temp.isEmpty()) {
                    String ss = temp.pop();
                    bigger = bigger + strToNum(ss,false) + " ";
                }
            } else if (leftStack.size() != rightStack.size()) {//个数不等报错
                bigger = "ERROR";
            } else {  //其它一对一,二对二,三对三,五对五情况
                Stack<String> temp = new Stack<String>();
                if (Integer.parseInt(leftStack.peek()) > Integer.parseInt(rightStack.peek())) {
                    temp = leftStack;
                } else {
                    temp = rightStack;
                }
                while (!temp.isEmpty()) {
                    String ss = temp.pop();
                    bigger = bigger + strToNum(ss,false) + " ";
                }
            }
            System.out.println(bigger);
        }
    }
}
发表于 2023-04-30 15:43:10 回复(0)
import java.util.*;

public class Main {
    static String[] pai = new String[]{"3", "4","5", "6","7", "8","9", "10","J", "Q",
            "K", "A","2", "joker", "JOKER"};
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        String p1 = str.split("-")[0];
        String p2 = str.split("-")[1];
        String[] p1s = str.split("-")[0].split(" ");
        String[] p2s = str.split("-")[1].split(" ");
        if(1 == p1s.length){
            if(1 != p2s.length && !is***(p2s)){
                System.out.println("ERROR");
            }else if(1 == p2s.length){
                if(compare(p1s[0], p2s[0])){
                    System.out.println(p1);
                }else{
                    System.out.println(p2);
                }
            }else{
                System.out.println(p2);
            }
        } else if(2 == p1s.length && !is***(p1s)){
            if(2 != p2s.length && !is***(p2s)){
                System.out.println("ERROR");
            }else if(2 == p2s.length){
                if(compare(p1s[0], p2s[0])){
                    System.out.println(p1);
                }else{
                    System.out.println(p2);
                }
            }else{
                System.out.println(p2);
            }
        } else if(3 == p1s.length){
            if(3 != p2s.length && !is***(p2s)){
                System.out.println("ERROR");
            }else if(3 == p2s.length){
                if(compare(p1s[0], p2s[0])){
                    System.out.println(p1);
                }else{
                    System.out.println(p2);
                }
            }else{
                System.out.println(p2);
            }
        } else if(5 == p1s.length){
            if(5 != p2s.length && !is***(p2s)){
                System.out.println("ERROR");
            }else if(5 == p2s.length){
                if(compare(p1s[0], p2s[0])){
                    System.out.println(p1);
                }else{
                    System.out.println(p2);
                }
            }else{
                System.out.println(p2);
            }
        }else if(is***(p1s)){
            if(!is***(p2s)){
                System.out.println(p1);
            }else if(2 == p1s.length){
                System.out.println(p1);
            }else if(2 == p2s.length){
                System.out.println(p2);
            }else{
                if(compare(p1s[0], p2s[0])){
                    System.out.println(p1);
                }else{
                    System.out.println(p2);
                }
            }
        }else{
            System.out.println("ERROR");
        }
    }

    private static boolean is***(String[] p){
        if(2 == p.length && "joker".equals(p[0]) && "JOKER".equals(p[1])){
            return true;
        }
        if (4 == p.length && p[0].equals(p[1]) && p[0].equals(p[2]) && p[0].equals(p[3])) {
            return true;
        }
        return false;
    }

    private static boolean compare(String p1, String p2){
        int n1 = 0, n2 = 0;
        for (int i = 0; i < pai.length; i++) {
            if(p1.equals(pai[i])){
                n1 = i;
            }
            if(p2.equals(pai[i])){
                n2 = i;
            }
        }
        return n1 > n2;
    }
}
发表于 2023-04-27 12:22:54 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
        String [] strs = in.nextLine().split("-");

        String[] strs1 = strs[0].split(" ");
        String[] strs2 = strs[1].split(" ");

        // 将 3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER 转变为 3 4 5 6 7 8 9 A J Q K a R r
        // 通过字符的ASCII码直接可以判断 字符大小
        for(int i = 0 ; i < strs1.length; i++){
            String str = strs1[i];
            if(str.equals("joker")){
                sb1.append("R");
            }else if (str.equals("JOKER")){
                sb1.append("r");
            }else if(str.equals("10")){
                sb1.append("A");
            }else if (str.equals("A")){
                sb1.append("a");
            }
            else{
                 sb1.append(str);
            }
        }

        for(int i = 0 ; i < strs2.length; i++){
            String str = strs2[i];
            if(str.equals("joker")){
                sb2.append("R");
            }else if (str.equals("JOKER")){
                sb2.append("r");
            }else if(str.equals("10")){
                sb2.append("A");
            }else if (str.equals("A")){
                sb2.append("a");
            }
            else{
                sb2.append(str);
            }
        }
       
        int win = -1;
       
        // 获得等级
        int flag1 = isFlag(sb1);
        int flag2 = isFlag(sb2);
        /**
            等级不一样时
         */
        if(flag1 != flag2){
            // 如果有炸弹或对王可以比较
            if(flag1 == 5 || flag1 == 6 || flag2 == 5 || flag2 == 6){
                    win = flag1 > flag2 ? 1 : 2;
            }else{
                    System.out.print("ERROR");
            }
        }else{ //相同等级比较第一个字母
                 win = sb1.charAt(0) > sb2.charAt(0) ? 1 : 2;
        }
        if(win != -1){
            String res = win == 1? strs[0]:strs[1];
            System.out.println(res);
        }
    }
    /**
        个子:1
        对子:2
        三个:3
        顺子:4
        炸弹:5
        对王:6
     */
    public static int isFlag(StringBuilder sb){
        if(sb.length() == 2){
            if(sb.charAt(0) == sb.charAt(1)){
                return 2;
            }else{
                return 6;
            }
        }
        if(sb.length() == 5){
            return 4;
        }
        if(sb.length() == 4){
            return 5;
        }
        return sb.length();
    }
}
发表于 2023-04-10 18:37:17 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] s = in.nextLine().split("-");
        System.out.println(compareTo(s[0],s[1]));
    }
    public static String compareTo(String a , String b){
        String pai = "3 4 5 6 7 8 9 10 J Q K A 2 joker JOKER";
        String[] aPai = a.split(" ");
        String[] bPai = b.split(" ");
        if(a.equals("joker JOKER")){
            return a;
        }
        if(b.equals("joker JOKER")){
            return b;
        }
        if(aPai.length == 4 && bPai.length != 4){
            return a;
        }
        if(bPai.length == 4 && aPai.length != 4){
            return b;
        }
        if(aPai.length == bPai.length){
            return pai.indexOf(aPai[0])>pai.indexOf(bPai[0]) ? a : b;
        }
        return "ERROR";
    }
}

发表于 2023-04-07 19:34:21 回复(1)
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println(get(scanner.nextLine()));
    }

    //因为输入的是按出牌规则来的(只出单张,对子,三张,炸弹,顺子)
    private static String get(String s) {
        String pager1 = s.split("-")[0];
        String pager2 = s.split("-")[1];
        String[] pager1Arr = pager1.split(" ");
        String[] pager2Arr = pager2.split(" ");
        // 对王最大
        if (pager1.equalsIgnoreCase("JOKER JOKER") || pager2.equalsIgnoreCase("JOKER JOKER")) {
            return "joker JOKER";
        }
        if (pager1Arr.length == pager2Arr.length) { // 牌数一样,直接比较第一个
            return value(pager1Arr[0]) > value(pager2Arr[0]) ? pager1 : pager2;
        } else { // 牌数不相同,只有放炸弹的时候才可以比较;其他为错误(单张对三张等)
            boolean isPaper1Num4 = pager1Arr.length == 4;
            boolean isPaper2Num4 = pager2Arr.length == 4;
            if (isPaper1Num4) {
                return pager1;
            } else if (isPaper2Num4) {
                return pager2;
            } else {
                return "ERROR";
            }
        }
    }

    private static int value(String s) {
        if (s.equals("J")) {
            return 11;
        } else if (s.equals("Q")) {
            return 12;
        } else if (s.equals("K")) {
            return 13;
        } else if (s.equals("A")) {
            return 14;
        } else if (s.equals("2")) {
            return 15;
        } else if (s.equals("joker")) {
            return 16;
        } else if (s.equals("JOKER")) {
            return 17;
        }
        return Integer.parseInt(s);
    }
}

发表于 2023-04-06 17:08:34 回复(0)
import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        // 主要用于拍张相同时判断
        Map<String, Integer> table = new HashMap<String, Integer>() { {
            put("3", 0);put("4", 1);put("5", 2);put("6", 3);put("7", 4);
            put("8", 5);put("9", 6);put("10", 7);put("J", 8);put("Q", 9);
            put("K", 10);put("A", 11);put("2", 12);put("joker", 13);put("JOKER", 14);
         } };
        //"joker", "JOKER", "2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "4", "3"};
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            String line = in.nextLine();
            String[] lineSplit = line.split("-");
            String[] first = lineSplit[0].split(" ");
            String[] seccond = lineSplit[1].split(" ");
            String max = "ERROR";
            if(first.length == seccond.length){ // 相等时,通过查表比较方便
                if(table.get(first[0]) > table.get(seccond[0])){
                    max = lineSplit[0];
                } else {
                    max = lineSplit[1];
                }
            } else if(first.length == 2){ // 判断第一是否对王,或者第二是否炸
                if(first[0].equals("joker")){
                    max = lineSplit[0];
                } else if(seccond.length == 4){
                    max = lineSplit[1];
                }
            } else if(seccond.length == 2){
                if(seccond[0].equals("joker")){
                    max = lineSplit[1];
                } else if(first.length == 4){
                    max = lineSplit[0];
                }
            } else if(first.length == 4){
                max = lineSplit[0];
            } else if(seccond.length == 4){
                max = lineSplit[1];
            }
            System.out.println(max);
        }
    }
}


发表于 2023-02-17 09:39:50 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别

        String a = in.nextLine();
        String[] aArr = a.split("-");
        String[] a1 = aArr[0].split(" ");
        String[] a2 = aArr[1].split(" ");

        //个子、对子、顺子(连续5张)、三个、炸弹(四个)和对王中的一种
        //除炸弹外,两个类型不同输出ERROR
        //将牌转换为数字J为11-JOKER17
        int[] intA = test(a1);
        int[] intB = test(a2);
        //判断类型并输出为标准数组
        int[] resA = test2(intA);
        int[] resB = test2(intB);
        if(resA[0]==6){
            printArr(a1);
            return;
        }
        if(resB[0]==6){
            printArr(a2);
            return;
        }
        //相同类型进行比较
        if(resA[0]==resB[0]){
            if(resA[1]>resB[1]){
                printArr(a1);
                return;
            }else{
                printArr(a2);
                return;
            }
        }
        //出现一个为炸时,另一个另外类型的进行比较

       if(resA[0]==4){
            printArr(a1);
            return;
        }
        if(resB[0]==4){
            printArr(a2);
            return;
        }
        System.out.println("ERROR");


    }
    //输出结果
    public static void printArr(String[] arr){
        for (int i = 0; i < arr.length; i++){
            System.out.print(arr[i]+" ");
        } 
    }

    //判断类型并输出为标准数组
    //先判断类型1、为个子[1,总和],对子[2,某个值],三个[3,其中一个],四子[4,其中一个],顺子[5,最小值],王对子[6,100](最大)
    public static int[] test2(int[] arr) {
        int[] result = new int[2];
        //为单个个子
        if (arr.length == 1) {
            result[0] = 1;
            result[1] = arr[0];
            return result;
        }
        //王对子
        if(arr[0]==16&&arr[1]==17){
            result[0] = 6;
            result[1] = 1000;
            return result;
        }
        //长度为2时(对子或者个子)
        if(arr.length==2){
            if(arr[0]==arr[1]){
                result[0] = 2;
                result[1] = arr[0];
                return result;
            }else{
                result[0] = 1;
                result[1] = arr[0]+arr[1];
                return result;
            }
        }
        if(arr.length==3){
            if(arr[0]==arr[1]&&arr[1]==arr[2]){
                result[0] = 3;
                result[1] = arr[0];
                return result;
            }else{
                result[0] = 1;
                result[1] = arr[0]+arr[1]+arr[2];
                return result;
            }
        }
        if(arr.length==4){
            if(arr[0]==arr[1]&&arr[1]==arr[2]&&arr[2]==arr[3]){
                result[0] = 4;
                result[1] = arr[0];
                return result;
            }else{
                result[0] = 1;
                result[1] = arr[0]+arr[1]+arr[2]+arr[3];
                return result;
            }
        }
        if(arr.length==5){
            for(int i = 0;i<4;i++){
                if(arr[i] == arr[i+1]+1){
                    result[0] = 5;
                    result[1] = arr[0];
                    return result;
                }else{
                    result[0] = 1;
                    result[1] = arr[0]+arr[1]+arr[2]+arr[3]+arr[4];
                    return result;
                }
            }
        }
        if(arr.length>5){
            result[0] = 1;
            for(int i =0;i<arr.length;i++){
                result[1] += arr[i];
            }
        }
        return result;
    }
    //牌转换为数字
    public static int[] test(String[] arr) {
        int[] result = new int[arr.length];
        for (int i = 0; i < arr.length; i++) {
            switch (arr[i]) {
                case "3":
                case "4":
                case "5":
                case "6":
                case "7":
                case "8":
                case "9":
                case "10":
                    result[i] = Integer.parseInt(arr[i]);
                    break;
                case "J":
                    result[i] = 11;
                    break;
                case "Q":
                    result[i] = 12;
                    break;
                case "K":
                    result[i] = 13;
                    break;
                case "A":
                    result[i] = 14;
                    break;
                case "2":
                    result[i] = 15;
                    break;
                case "joker":
                    result[i] = 16;
                    break;
                case "JOKER":
                    result[i] = 17;
                    break;
            }
        }
        return result;
    }
}

发表于 2023-01-06 17:14:04 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String str1 = str.split("-")[0];
        String str2 = str.split("-")[1];
        int count1 = 0,count2 = 0;
        //判断长度
        for(int i = 0;i < str1.length();i++){
            if(str1.charAt(i) == ' ') count1++;
        }
        for(int i = 0;i < str2.length();i++){
            if(str2.charAt(i) == ' ') count2++;
        }
        
        //对王的情况
        if(str1.equals("joker JOKER") || str2.equals("joker JOKER")) System.out.println("joker JOKER");
        
        //炸弹的情况
        else if(count1 == 3 || count2 == 3){
            if(count1 == 3 && count2 != 3) System.out.println(str1);
            else if(count2 == 3 && count1 != 3) System.out.println(str2);
            else if (count1 == 3 && count2 == 3){
                if(compareCard(str1.charAt(0),str2.charAt(0)) == str1.charAt(0)){
                    System.out.println(str1);
                }
                else System.out.println(str2);
            }
        }
        else if(count1 != count2) System.out.println("ERROR");
        //else if(str1.contains(" ")) System.out.println("ERROR");
        //三个
        else if(count1 == 2){
            if(compareCard(str1.charAt(0),str2.charAt(0)) == str1.charAt(0)){
                System.out.println(str1);
            }
            else System.out.println(str2);
        }
        
        //顺子
        else if(count1 == 4){
            if(compareCard(str1.charAt(0),str2.charAt(0)) == str1.charAt(0)){
                System.out.println(str1);
            }
            else System.out.println(str2);
        }
        //对子
        else if(count1 == 1){
            if(compareCard(str1.charAt(0),str2.charAt(0)) == str1.charAt(0)){
                System.out.println(str1);
            }
            else System.out.println(str2);
        }
        else if(count1 == 0){
            if(compareCard(str1.charAt(0),str2.charAt(0)) == str1.charAt(0)){
                System.out.println(str1);
            }
            else System.out.println(str2);
        }
    }
    
    public static Character compareCard(Character c1, Character c2){
        Map<Character, Integer> map = new HashMap<>();
        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('1',8);
        map.put('J',9);
        map.put('Q',10);
        map.put('K',11);
        map.put('A',12);
        map.put('2',13);
        map.put('j',14);
        map.put('J',15);
        if(map.get(c1) > map.get(c2)){
            return c1;
        }
        else{
            return c2;
        }
    }
}

发表于 2022-09-10 00:38:25 回复(0)
/**
 * @author YXQ
 * @create 2022/8/21  13:40
 */

import java.util.Scanner;
import java.util.HashMap;

public class Main {
     static HashMap<String ,Integer>map=new HashMap(){
    {
        put("3",3);
        put("4",4);
        put("5",5);
        put("6",6);
        put("7",7);
        put("8",8);
        put("9",9);
        put("10",10);
        put("J",11);
        put("Q",12);
        put("K",13);
        put("A",14);
        put("2",15);
        put("joker",16);
        put("JOKER",17);
        
        
        
    }
};
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        String str =sc.nextLine();
        String[] strs1=str.split("-")[0].split(" ");
        String[] strs2=str.split("-")[1].split(" ");
        System.out.println(compare(strs1,strs2));

    }
    public static String compare(String[] strs1,String[] strs2){
        if(isJocker(strs1))return String.join(" ",strs1);
        if(isJocker(strs2))return String.join(" ",strs2);
        int[] nums1=checkeNum(strs1);
        int[] nums2=checkeNum(strs2);
        if(nums1[0]==nums2[0])return nums1[1]>nums2[1]? String.join(" ",strs1):String.join(" ",strs2);
        else {
            if(nums1[0]==4)return String.join(" ",strs1);
            else if (nums2[0]==4) return String.join(" ",strs2);
            return "ERROR";
        }

    }
    public static boolean isJocker(String[] strs){
        if(strs.length==2){
            if(strs[0].equals("joker")||strs[1].equals("joker"))return true;
        }
        return false;
    }
    public static int[] checkeNum(String[] strs){
        int num=map.get(strs[0]);
//         System.out.println(num);
        int n=strs.length;
//        数组中第一个存的是牌的数量  第二个存的是牌的最小数字
        int[] res=new int[]{n,num};
        return res;
    }


}

发表于 2022-08-21 15:12:14 回复(0)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        ArrayList<String> list=new ArrayList<>();
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        list.add("7");
        list.add("8");
        list.add("9");
        list.add("10");
        list.add("J");
        list.add("Q");
        list.add("K");
        list.add("A");
        list.add("2");
        list.add("joker");
        list.add("JOKER");
        while((str=br.readLine())!=null){
            boolean flag=false;
            boolean error=false;
            String[] strArr=str.split("-");
            String[] strArr1=strArr[0].split(" ");
            String[] strArr2=strArr[1].split(" ");
            if(strArr1.length==strArr2.length){
                if(strArr1.length==1){
                    flag=list.indexOf(strArr1[0])>list.indexOf(strArr2[0])?false:true;
                   
                }
                if(strArr1.length==2){
//                     if(strArr1[0].equals("joker")&&strArr1[0].equals("JOKER")){
//                         flag=false;
//                         continue;
//                     }else if(strArr2[0].equals("joker")&&strArr2[0].equals("JOKER")){
//                         flag=true;
//                         continue;
                    flag=list.indexOf(strArr1[0])+list.indexOf(strArr1[1])>list.indexOf(strArr2[0])+list.indexOf(strArr2[1])?false:true;
                    

                    }
                if(strArr1.length==3){
                    flag=list.indexOf(strArr1[0])>list.indexOf(strArr2[0])?false:true;
                    
                }
                if(strArr1.length==4){
                    flag=list.indexOf(strArr1[0])>list.indexOf(strArr2[0])?false:true;
                    
                }
                if(strArr1.length==5){
                     flag=list.indexOf(strArr1[0])>list.indexOf(strArr2[0])?false:true;
                    
                }
                    
                    
                    
                }else{
                if(strArr1.length==2&&"joker".equals(strArr1[0])&&"JOKER".equals(strArr1[1])){
                    flag=false;
                    
                }else if(strArr2.length==2&&"joker".equals(strArr2[0])&&"JOKER".equals(strArr2[1])){
                    flag=true;
                   
                    
                }else {
                     if(strArr1.length==4){
                        flag=false;
                        
                    }else if(strArr2.length==4){
                        flag=true;
                        
                    }else {
                         error=true;
                     }
                }
                   
            }
            if(error){
                System.out.println("ERROR");
            }else{
                if(flag){
                for(String s:strArr2){
                    System.out.print(s+" ");
                }
                System.out.println();
            }else{
                for(String s:strArr1){
                    System.out.print(s+" ");
                }
                System.out.println();
            }
            }
            }
            
        }
    }

发表于 2022-08-01 18:48:07 回复(0)