剑指offer61.扑克牌中的顺子
发布人:shili8
发布时间:2025-02-14 22:35
阅读次数:0
**剑指Offer61: 扑克牌中的顺子**
扑克牌中有52张牌,分别是4种花色(黑桃、红心、方块、梅花)的13个数字(A、2-10、J、Q、K)。在一副扑克牌中,有一种特殊的牌组合称为“顺子”,即由5张连续的牌组成,且花色可以不同。例如:3、4、5、6、7都是一个顺子。
本题要求编写一个函数来判断一副扑克牌中的牌是否构成了一个顺子。
**解法**
首先,我们需要定义一个数据结构来表示一张牌。我们使用一个结构体来存储牌的花色和数字。
cppstruct Card {
char suit; // 花色:黑桃、红心、方块、梅花 int num; // 数字:A、2-10、J、Q、K};
接下来,我们需要定义一个函数来判断一副扑克牌中的牌是否构成了一个顺子。我们可以使用一个循环来检查牌的连续性。
cppbool isContinuous(vector<Card>& cards) {
// 检查牌的数量是否为5张 if (cards.size() !=5) return false;
// 将牌的数字转换为0-12之间的整数 vector<int> nums;
for (auto card : cards) {
int num = card.num;
if (num == 'A') num =1; // A等于1 else if (num >= '2' && num <= '9') num -= '0'; //2-9直接转换为整数 nums.push_back(num);
}
// 检查牌的连续性 sort(nums.begin(), nums.end());
for (int i =1; i < 5; ++i) {
if (nums[i] - nums[i-1] !=1) return false;
}
return true;
}
**测试**
我们可以使用以下代码来测试上面的函数。
cppint main() {
vector cards = {{'S', '3'}, {'H', '4'}, {'C', '5'}, {'D', '6'}, {'S', '7'}};
cout << boolalpha << isContinuous(cards) << endl; // true cards = {{'S', 'A'}, {'H', '2'}, {'C', '3'}, {'D', '4'}, {'S', '5'}};
cout << boolalpha << isContinuous(cards) << endl; // false return0;
}
**总结**
本题要求编写一个函数来判断一副扑克牌中的牌是否构成了一个顺子。我们使用一个结构体来表示一张牌,并定义了一个函数来检查牌的连续性。测试代码可以帮助我们验证函数的正确性。

