zoukankan      html  css  js  c++  java
  • 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();
        }

     

  • 相关阅读:
    [Windows] 输入字符间距变宽
    [Android] 安卓手机不用root删除自带app
    [Linux] 内核通知链 notifier
    [RK3399] ES8316+NS4150 播放视频只有背景音,播放歌曲有的有声音,有的无声音
    [Linux] RTC 读写指令及测试程序
    [Linux] scp指令用法
    [Ubuntu] sudo apt-get update指令执行失败
    [RK3399] 修改移动网络默认为4G
    [RK3288] 外接USB设备出现丢数
    laravel 模拟数据批量添加
  • 原文地址:https://www.cnblogs.com/mmdz/p/15608752.html
Copyright © 2011-2022 走看看