扑克牌jqk分别是谁里的杂牌是那些

《剑指Offer》(69)
题目:从扑克牌里随机抽出5张牌,判断是不是一个顺子,即这五张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大、小王可以看成是任意的数字。
&分析:这里我们需要将扑克牌的背景抽象成计算机语言。首先,因为扑克牌也是数字,所以我们并不陌生,可以把5张牌看成由5个数字组成的数组。大小王看成是任意的数字,我们可以用0来表示,这样我们就用整形的数字表示了所有的牌。这样简化以后,对于一个5个整数判断它是不是一个顺子就不是什么难题了。但是这里有一个特殊的地方,就是0可以代表任意数字,比如3,2,0,0,6,那么它应该是顺子2,3,4,5,6,因为0代替了4,5.
所以我们可以分为三步解决这个问题:
第一步:统计5个数字里的0的个数,但是如果一旦发现有重复数字,那么肯定不是顺子,因为有对子了;
第二步:统计不连续的数字的相差的个数;
第三步:看相差的数字的个数与0的个数如果是否相等,或小于0的个数(0的个数最大为2,大小王两张)则返回true,否则返回false;
具体实现代码如下:
#include &iostream&
#include &algorithm&
int num[5]={3,2,0,0,6};
bool IsInvalid=
int compare(const void *arg1,const void *arg2)
return *(int *)arg1-*(int *)arg2;
bool IsContinue(int *number,int length)
if(NULL==number || length&1)
IsInvalid=
//1.对数据进行排序;
qsort(number,length,sizeof(int),compare);
int numberOfZero=0;
int numberOfGap=0;
//2.统计0的个数;
for(int i=0;i&i++)
if(number[i]==0)
numberOfZero++;
//3.看是否有对子和统计0的个数
int small=numberOfZ
int big=small+1;
while(big&length)
if(number[small]==number[big] && number[big]!=0)//有对子,0除外,退出,肯定不是顺子;
numberOfGap+=number[big]-number[small]-1;
//4.看0的个数与间隔数字的关系
return numberOfZero&=numberOfGap ? true:
int main()
bool result=IsContinue(num,5);
if(IsInvalid)
cout&&&THE INPUT IS INVALID!&&&
if(result)
cout&&&progression &&&//顺子;
cout&&&mixed CONNECTION!&&&//杂牌;
system(&pause&);
运行结果如下:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:153471次
积分:4425
积分:4425
排名:第5329名
原创:241篇
转载:21篇
评论:25条
阅读:7406
文章:39篇
阅读:22892
文章:70篇
阅读:43314
文章:13篇
阅读:6862
时间不会因为你的迷茫而停留;
生活不会因为你的惆怅而改变;
即使此刻:
不知有多少人仍在不停的翻动着书页......

我要回帖

更多关于 扑克牌中长胡子的是 的文章

 

随机推荐