每天一道算法题(22)——扑克牌的顺子
题目:
从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2-10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。
思路:
设定王为0。统计非王的牌之间的空格数,若小于王的总数(对应填补),则为顺子。有任意一张牌大于2,为非顺子。
代码:
bool process(const char* str=NULL){ if(!str||strlen(str)<5) return false; int* data=new int[14]; memset(data,0,14*sizeof(int));//使用之前一定初始化 while(*str!='\0') data[*str++ - '0']++;//统计牌数 int counter=0;//非王的牌的总数 int blank=0;//牌之间的空格数 bool flag=false; for(int i=1;i<14&&(counter<=5-data[0]);i++){ if(data[i]==1){//出现一张 counter++; flag=true; } else if(data[i]>1){//对子以及以上 delete []data; return false; } else if(flag)//牌之间空格数 blank++; } int king=data[0]; delete []data; if(blank<=king)//比较空格和king的张数 return true; else return false; }