【剑指offer】面试题61:扑克牌中的顺子【C++版本】

总结的部分题目思路与代码,待完善。
【剑指offer-第二版】部分题目与解答【C++版本】

题目:

扑克牌中的顺子

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。其中A为1,J为11,Q为12,K为13,而大小王为0,且大小王能够当做任意一张牌。

解题思路:

1.首先应该对数组进行排序。
2.统计数组中大小王(0)出现的个数。
3.统计数组中所有相邻数之间的间隔。
4.同时还需要排除对子的情况,如果出现了对子,那么肯定不可能是顺子(0除外)。
5.最后比较0的个数和间隔大小,如果0的个数大于等于间隔数,说明可以组成顺子。

可以AC的解法【C++版本】

#include 
#include 
#include 

using namespace std;

int main() {
    vector<int> data{ 5,7,6,0,4 };

    if (IsContinuous(data)) {
        cout << "is continuous."<< endl;
    }
    else {
        cout << "You don't get lucky." << endl;
    }

    system("pause");
    return 0;
}

bool IsContinuous(vector<int> numbers) {
    if (numbers.size() != 5)return false;

    sort(numbers.begin(), numbers.end());
    int numOfZero = 0;
    //统计0的个数
    for (int i = 0; i != 5; i++) {
        if (!numbers[i])
            numOfZero++;
    }

    int beg = numOfZero+1;
    int numOfGap = 0;
    while (beg < 5) {
        //如果出现了对子,那么肯定不可能是连子
        if (numbers[beg - 1] == numbers[beg])
            return false;

        numOfGap += numbers[beg] - numbers[beg - 1] -1;
        beg++;
    }

    return (numOfZero >= numOfGap) ? true : false;
}

你可能感兴趣的:(后台,剑指offer,C++,剑指offer,C++,扑克牌中的顺子)