洗牌算法

每日算法   2023-06-15 23:39   1211   0  

题目描述:

要求开发一款扑克游戏,编写一套洗牌算法,而公平地洗牌是将洗好的牌存储在一个整型数组里。

分析:

定义一个洗牌函数,函数内用$tmp数组存储1~54表示54张牌。然后对这54张牌进行循环,每次循环时,通过随机函数随机从0到剩余牌数中生成一个数返回做索引,从$tmp数组中取出这个索引对应的牌,存到洗牌后的数组$cards。取出这张牌后同时要删除该牌在$tmp数组内的位置,最后还要通过array_values()函数对$tmp数组的值重新排序,保证数组从0到当前剩余的牌数中可以根据随机生成的索引取出剩余的牌。最后得到洗好的牌都存在数组$cards中。


代码实现如下:

$card_num = 54;

function wash_card($card_num){
    $cards = $tmp = [];
    for($i=0;$i<$card_num;$i++){
        $tmp[$i] = $i;
    }
    for ($i=0; $i < $card_num; $i++) { 
        $index = rand(0,$card_num-$i-1);
        $cards[$i] = $tmp[$index];
        $tmp = array_values($tmp);
    }
    return $cards;
}

var_dump(wash_card($card_num));


结果:

56775_krgo_7428.png


上一篇
没有了