C++从若干副扑克牌中随机抽5张牌,判断是不是一个顺子,即这五张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,大、小王为0,可以看成任意数字。A不能视为14。 定义一个isStraight()函数,函数参数为数组,返回值为bool型,若为顺子则返回true,反之则返回false。在主函数中调用isStraight()函数,并输出结果 提示:连续的牌,不能有相同的数,且最大的牌和最小的牌(除开大小王即0)之差要小于5
时间: 2023-10-04 16:12:15 浏览: 120
以下是 C++ 代码实现:
```cpp
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
bool isStraight(vector<int>& nums) {
sort(nums.begin(), nums.end());
int zeroCount = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == 0) {
zeroCount++;
} else if (i > 0 && nums[i] == nums[i-1]) {
return false;
}
}
return nums[nums.size()-1] - nums[zeroCount] < 5;
}
int main() {
vector<int> nums = {1, 2, 3, 4, 5};
cout << isStraight(nums) << endl; // true
nums = {1, 2, 3, 4, 6};
cout << isStraight(nums) << endl; // false
nums = {1, 2, 0, 4, 5};
cout << isStraight(nums) << endl; // true
nums = {0, 0, 1, 2, 5};
cout << isStraight(nums) << endl; // true
return 0;
}
```
首先将数组排序,然后统计大小王的数量 zeroCount,再检查除了大小王外是否有重复的牌,最后判断最大牌和最小牌的差是否小于 5 即可。
阅读全文