扑克牌顺子

Posted lune-qiu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了扑克牌顺子相关的知识,希望对你有一定的参考价值。

题目描述

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10位数字本身,A为1,J为11,Q为12,K为13,而大王,小王可以看成任意数字。为了方便我们将大小王看成0。

思路:

1.找出5张牌中得大小王,即0的个数

2.将牌排序,找出相邻牌中的空隙数

3.如果空缺的总数小于或等于0的个数,那么数组是连续的。

在下面的代码中,使用了sort函数,第一个参数为数组首地址,第二个参数为数组尾地址,第三个参数为排序规则。默认为升序

我的代码:

    bool IsContinuous( vector<int> numbers ) {
        int len = numbers.size();
        if(len<5)
            return false;
        sort(numbers.begin(),numbers.end());
        int ZeroNum = 0;
        int GapNum = 0;
        for(int i = 0; i < len;i++)
        {
            if(numbers[i] == 0)
                ZeroNum++;
        }
        int x = ZeroNum;
        for(int j = ZeroNum+1; j < len;j++)
        {
            if(numbers[j] == numbers[x])
                return false;
            GapNum += numbers[j] - numbers[x] -1;//正常是相差一个,如果不连续的话就是间隔
            x = j;
        }
        return ZeroNum >= GapNum ? true : false;
    }

 

以上是关于扑克牌顺子的主要内容,如果未能解决你的问题,请参考以下文章

扑克牌顺子

扑克牌中的顺子

扑克牌中的顺子

扑克牌中的顺子

剑指 Offer 45. 把数组排成最小的数 剑指 Offer 61. 扑克牌中的顺子 剑指 Offer 40. 最小的k个数

【动漫算法】扑克牌的顺子