【原创】求出随机扑克牌中的最大顺子

【原创】求出随机扑克牌中的最大顺子

面试题目:一副扑克牌,没有大小王,其中,2最大,A次之,3最小,顺子可以为8、9、10、J、Q、K、A,最大顺子规则为:8、9、10、J、Q、K、A比7、8、9、10、J、Q、K大,7、8、9、10、J、Q、K又比10、J、Q、K、A大,现从扑克牌中随机抽取几张,求出最大的扑克牌。

解题方案:由于A、2的特殊排序规则,将A、2变成14、15,可极大的简化解题的思路【面试题非原创,方案为原创】

$arr = array(3,4,5,5,5,7,8,8,9,10,3,12,13,14);
sort($arr); // array(3,3,4,5,5,5,7,8,8,9,10,12,13,14);
$temp = array();
$key  = 0;
for($i=0; $i<count($arr); $i++){
    $temp[$key][] = $arr[$i];
    // 当中有断隔
    if(isset($arr[$i+1]) && $arr[$i]+1 != $arr[$i+1] && $arr[$i] != $arr[$i+1]){
        if(isset($temp[$key])){
            $temp[$key] = array_unique($temp[$key]);  // 去除重复的
        }
        $key++;
    }
}
// 重新整理比较数据
$new = array();
foreach($temp as $k=>$v){
    if(isset($temp[$k+1])){
        if(count($temp[$k+1]) > count($temp[$k])){  // 个数不同,直接获取最大的
            $new   = array();
            $new[] = $temp[$k+1];
        }elseif(count($temp[$k+1]) == count($temp[$k])){ // 个数相同,比较总值大小
            // 直接获取总值较大的一个
            if(isset($new[0])){
                if(array_sum($temp[$k+1]) > array_sum($new[0])){
                    $new   = array();
                    $new[] = $temp[$k+1];
                }
            }else // 没有数值的话,则直接写入
                $new[] = $temp[$k+1];
            }
        }
    }
}
// 直接输出即可
var_dump($new[0]);  // array(7,8,9,10)

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据