Java_扑克牌顺子

Java_扑克牌顺子

题目:现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。

有如下规则:

  1. A为1,J为11,Q为12,K为13,A不能视为14

  2. 大、小王为 0,0可以看作任意牌

  3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false

  4. 数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]

思路:

  1. 先对数组执行排序。

  2. 判别重复: 排序数组中的相同元素位置相邻,因此可通过遍历数组,判断 nums[i]=nums[i+1] 是否成立来判重。

  3. 获取最大 / 最小的牌: 排序后,数组末位元素nums[4] 为最大牌;元素 nums[joker] 为最小牌,其中 joker 为大小王的数量。

 

代码:

    public static void main(String[] args) {
        /**
         * 现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
         * 有如下规则:
         * 1. A为1,J为11,Q为12,K为13,A不能视为14
         * 2. 大、小王为 0,0可以看作任意牌
         * 3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。
         * 4.数据保证每组5个数字,每组最多含有4个零,数组的数取值为 [0, 13]
         */

        // 自定义五张扑克牌
        int[] arr = {5,3,7,0,12};
        if(arr.length == 0){
            // 初始化数据获取随机五张扑克牌
            arr = init();
        }

        System.out.println("是不是顺子 :  " + IsContinuous(arr));

    }    

    public static boolean IsContinuous(int [] numbers) {
        int joker = 0;
        Arrays.sort(numbers); // 数组排序
        // 0 3 5 7 12
        for(int i = 0; i < 4; i++) {
            if(numbers[i] == 0) joker++; // 统计大小王数量
            else if(numbers[i] == numbers[i + 1]) return false; // 若有重复,提前返回 false
        }
        return numbers[4] - numbers[joker] < 5; // 最大牌 - 最小牌 < 5 则可构成顺子
    }

初始化:

    // 初始化数据
    public static int[] init() {
        // 定义(2副扑克牌)
        List<Integer> list = new ArrayList<>();
        int num = 2; // 2副扑克牌
        for (int a = 0; a < num; a++) {
            list.add(0); list.add(0);
            for (int i = 0; i < 4; i++) { // 四色
                for (int j = 1; j < 14; j++) { // A~K
                    list.add(j);
                }
            }
        }
        System.out.println("list = " + list.size());

        // 随机抽取5张
        List<Integer> arr = new ArrayList<>();
        List<Integer> pk = new ArrayList<>(5);
        boolean flag = true;
        Random random = new Random();
        for (int i = 0, len = 5; i < len; i++) {
            flag = true;
            int index = random.nextInt(list.size());
            for (int j = 0; j < arr.size(); j++) {
                if(arr.get(j) == index){
                    len ++;
                    flag = false;
                    break;
                }
            }
            arr.add(index);
            if(flag){
                pk.add(list.get(index));
            }else {
                continue;
            }
        }
        System.out.println("arr = " + arr);
        System.out.println("pk = " + pk);
        return pk.stream().mapToInt(Integer::intValue).toArray();
    }

 

原文地址:https://www.cnblogs.com/mmdz/p/15608752.html