您的位置:首页 > 其它

每天一道算法题(22)——扑克牌的顺子

2015-07-16 10:12 381 查看

题目:

从扑克牌中随机抽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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: