题目:
从扑克牌中随机抽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;
}