题目
来源 http://www.cnblogs.com/python27/archive/2011/11/27/2264405.html
随机抽取扑克牌中的n张牌,判断是不是顺子,即这5张牌是不是连续的。其中A看成1,J看成11,Q看成12,K看成13,大小王可以看成任何需要的数字。
分析
对于扑克牌来说,数字范围是很明确的,1到K外加大小王(设定为M)。假如这副牌是个顺子,也就是每张牌都不相同,那么利用一个大小为14的辅助数组counts[]就可以快速的实现排序,记录每张牌出现的次数,然后遍历输出次数为1的值即可。
判断这副牌是不是一个连续数列,需要判断相邻两个数字的差是否为1,大于1的话由M来填充(可以填充两个缺位)。
因为这样一副牌最多不过54张,算法时间复杂度O(1),空间复杂度O(1)
代码
1 bool IsContinuousPoker(char* pokers,unsigned int n) 2 { 3 if (pokers==NULL||n==0) 4 throw std::exception("Invalid input."); 5 6 int *counts=new int[14](); 7 8 char *p=pokers; 9 unsigned int num=0; 10 while (*p!='