67 俩个闲玩娱乐。 1.扑克牌的顺子

来源:互联网 发布:淘宝夏季情侣装 编辑:程序博客网 时间:2024/05/17 02:59

67.俩个闲玩娱乐。
1.扑克牌的顺子
从扑克牌中随机抽 5  张牌,判断是不是一个顺子,即这 5  张牌是不是连续的。2-10  为数
字本身,A为1,J 11,Q为12,K为13,而大小王可以看成任意数字。

/*67.俩个闲玩娱乐。1.扑克牌的顺子从扑克牌中随机抽 5  张牌,判断是不是一个顺子,即这 5  张牌是不是连续的。2-10  为数字本身,A为1,J 11,Q为12,K为13,而大小王可以看成任意数字。5张牌看成由5个数字组成的数组。大小王当成0.我们把数组排序。由于0可以当成任意数字,我们可以用0去补满数组中的空缺。也就是排序之后的数组不是连续的,即相邻的两个数字相隔若干个数字,但如果我们有足够的0可以补满这两个数字的空缺,这个数组实际上还是连续的。{0,1,3,4,5}。0可以当成2去填补这个空缺,所以是顺子 */#include<iostream>#include<stdio.h>#include<algorithm>using namespace std;bool checkGaps(int a[],int s,int e,int allowGaps){int i=s;while(i<e){allowGaps-=a[i+1]-(a[i]+1);if(allowGaps<0)return false;i++;}return true;}bool isStraight(int a[]){sort(a,a+5);if(a[0]>0)return checkGaps(a,0,4,0);else if(a[0]==0&&a[1]!=0)return checkGaps(a,1,4,1);return checkGaps(a,2,4,2);}int main(){int i;int a[]={1,0,3,4,5};int b[]={0,0,9,5,6};int c[]={1,0,2,3,6};for(i=0;i<5;i++)printf("%d",a[i]);if(isStraight(a))printf(" is straight.\n");elseprintf(" is not straight.\n");for(i=0;i<5;i++)printf("%d",b[i]);if(isStraight(b))printf(" is straight.\n");elseprintf(" is not straight.\n");for(i=0;i<5;i++)printf("%d",c[i]);if(isStraight(c))printf(" is straight.\n");elseprintf(" is not straight.\n");return 0;}


0 0