1. 程式人生 > 其它 >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();
    }