首页 > 试题广场 >

现在一副54张的扑克牌(2个大王,2个小王),任意抽五张牌,

[问答题]
现在一副54张的扑克牌(2个大王,2个小王),任意抽五张牌,判断是不是顺子。其中A看作1,J为11,Q为12,K为13。另外这里还有个“癞子”规则,就是大王和小王可以代替任何牌。比如:“红心A,黑桃3,小王,大王,方片5”, 上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4)。现在我们要用程序来判断5张牌是不是顺子。为了方便起见,你可以认为大小王是0。
按照数组下标接受元素为1 如果是0就用计数器加1 0个数+含一个数小于<5 不是顺子 计算 含1之间的间隙是否超过0个数 超过不是顺子
发表于 2022-05-14 16:39:35 回复(0)
五张牌,对除了大小王(0) 的其余数字排序,查找排序对排序后结果缺空数,缺空数等于大小王数,则为顺子,否则不是。
编辑于 2020-08-05 20:33:24 回复(0)
public static boolean isShun(String str){
        String[] str1 = str.split(",");
        HashMap<String, Integer> map = new HashMap<>();
        map.put("A", 1);
        map.put("J", 11);
        map.put("Q", 12);
        map.put("K", 13);
        for(int i = 2;i < 11;i++){
            map.put(String.valueOf(i), i);
        }
        int[] arr = new int[5];
        for (int i = 0; i < str1.length; i++) {
            if(str1[i].length() == 3){
                arr[i] = map.get(str1[i].substring(2));
            }else{
                arr[i] = 0;
            }
        }
        Arrays.sort(arr);
        int re = 0;
        for(int i = 0;i < 2;i++){
            if(arr[i] == 0){
                re++;
            }
        }
        int i = re;
        for(;i < 4;i++){
            if(arr[i + 1] - arr[i] == 0){
                return false;
            }
            if(arr[i + 1] - arr[i] == 2){
                if(re == 0){
                    return false;
                }
                re--;
            }
            if(arr[i + 1] - arr[i] == 3){
                if(re < 2){
                    return false;
                }
                re = 0;
            }
            if(arr[i + 1] - arr[i] > 3){
                return false;
            }
        }
        if(i == 4){
            return true;
        }
        return false;
    }
发表于 2019-02-20 15:45:23 回复(0)