從撲克牌中隨機抽取5張牌,判斷是不是一個順子,即這5張牌是不是連續(面試題)


從撲克牌中隨機抽取5張牌,判斷是不是一個順子,即這5張牌是不是連續的2-10位數字本身,A為1,J為11,Q為12,K為13,而大小王可以看成任意數字

 

分析該題:

  大小王可以當做任意數字,故將其記為0

  用php數組進行處理,將傳入的5個數,放到數組里

  獲取數組中每個數出現的次數:

    0的個數為n,n不能大於2

    其他的不能出現超過1次,超過即不能為5位順子(這里有歧義);

  去重去0后,判斷剩余數的個數m及差值 df 關系,

  如果差值df <= 剩余個數m + 0次數n -1,則這5個數是順子

 

代碼示例:

 1 function isStraight($num1, $num2, $num3, $num4, $num5){
 2     $startNumArr = [$num1, $num2, $num3, $num4, $num5];
 3     $numCountStatic = array_count_values($startNumArr);
 4     $zeroCount = 0;
 5     foreach ($numCountStatic as $num => $count) {
 6         if ($num === 0) {
 7             if ($count > 2) {
 8                 return false;
 9             }
10             $zeroCount = $count;
11         } else if ($count>1) {
12             return false; //這里有個歧義,不考慮重復數字不影響順子組成的話,去掉該判斷
13         } else if ($num > 13){
14             return false;
15         }
16     }
17     $uniqNumArr = array_unique($startNumArr);
18     sort($uniqNumArr);
19     if ($uniqNumArr['0'] === 0) {
20         array_shift($uniqNumArr);
21     }
22     return(count($uniqNumArr)+$zeroCount-1 >= max($uniqNumArr)-min($uniqNumArr));
23 }
24 
25 var_dump(isStraight(6,3,7,4,5));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM