php实现求扑克牌顺子(*****)(AC)(分类:把问题分小,利于排错)
php实现求扑克牌顺子(*****)(AC)(分类:把问题分小,利于排错)
一、总结
分类(那就可以把问题分小而逐步完成每个板块,这样是很简单的)
分类还有助于查错
二、php实现求扑克牌顺子
题目描述
LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张牌就可以变成“1,2,3,4,5”(大小王分别看作2和4),“So Lucky!”。LL决定去买体育彩票啦。 现在,要求你使用这幅牌模拟上面的过程,然后告诉我们LL的运气如何。为了方便起见,你可以认为大小王是0。
三、代码
1 <?php 2 //算法步骤:分类(那就可以把问题分小而逐步完成每个板块,这样是很简单的) 3 function IsContinuous($numbers) 4 { 5 sort($numbers); 6 $haveWang=false; 7 $wangNum=0; 8 foreach($numbers as $key=>$val){ 9 if($val==0){ $haveWang=true; $wangNum++;} 10 } 11 //抽到的牌有大小王的时候 12 if($haveWang){ 13 //有1个王 14 if($wangNum==1){ 15 //求数之间的差值 16 $cha=0; 17 for($i=1;$i<4;$i++){$cha+=$numbers[$i+1]-$numbers[$i];} 18 if($cha==3||$cha==4) return true; 19 else return false; 20 } 21 //有2个王 22 if($wangNum==2){ 23 $cha=0; 24 for($i=2;$i<4;$i++){$cha+=$numbers[$i+1]-$numbers[$i];} 25 if($cha==3||$cha==4||$cha==2) return true; 26 else return false; 27 } 28 //有3个王 29 if($wangNum==3){ 30 $cha=0; 31 for($i=3;$i<4;$i++){$cha+=$numbers[$i+1]-$numbers[$i];} 32 if($cha==1||$cha==3||$cha==4||$cha==2) return true; 33 else return false; 34 } 35 //有4个王 36 if($wangNum==4){ 37 return true; 38 } 39 }else{//没抽到大小王的时候 40 $maxPai=$numbers[4]; 41 $minPai=$numbers[0]; 42 //如果最大减最小大于4,返回false 43 if($maxPai-$minPai>4) return false; 44 //如果最大减最小小于4,说明有重复,返回false 45 if($maxPai-$minPai<4) return false; 46 //等于4的话,要保证每张不一样 47 $numbers=array_unique($numbers); 48 if(count($numbers)==5) return true; 49 } 50 51 52 }
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、每年专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2024-10-30:27岁,宅加太忙,特此在网上找女朋友,坐标上海,非诚勿扰,vx:fan404006308
AI交流资料群:753014672