想用PHP作抽獎系統,思路..

作PHP確實不多接觸算法問題
前幾天遇到一個PHP概率算法問題,頗有意思,
大體就是一個抽獎程序
貴重物品出現概率低,便宜物品出現概率高
網上找打了答案,在下面評論中看到了另外一種方法,我以爲更好,效率更高

轉來這個問題,和我以前遇到的差很少,
問題是這樣子的:在一個物品合成系統中,須要使用幾件不一樣的物品來合成寶石,有不一樣的概率生成一顆(50%)、兩顆(16%)和三顆(2%)寶石,其他的爲爆掉,即什麼也得不到。

//初始化數組

$stone_arr = array( 
array( 'num' => 1, 'prob' => '50%' ),
array( 'num' => 2, 'prob' => '16%' ),
array( 'num' => 3, 'prob' => '2%' )
);

//隨機得到一個幸運數字
$luck_num = mt_rand( 0, 99 );
//初始化概率區間和最終寶石生產數目
$lucky_range = $made_num = 0;

foreach( $stone_arr as $sa ){
$prob = intval( $sa['prob'] );
if( $luck_num >= $lucky_range && $luck_num < $lucky_range + $prob ){
$made_num = $sa['num'];
break;
}
else{
$lucky_range += $prob;
}
}

for( $i = 0; $i < $made_num; $i++ ){
//生產寶石的邏輯
}

而後是第二種方法,我喜歡的方法,不知道數量多了效率會不會也有問題

$a = array_fill(0,50, 1);
$b = array_fill(0,16, 2);
$c = array_fill(0,2, 3);
$d = array_fill(0,32, 0);
$arr = array_merge($a, $b, $c);
//var_dump($arr);
$d = mt_rand(0,99);
echo $arr[$d];算法

 

http://www.yl1001.com/yw.htm?doaction=question_detail&question_id=7221371520123639數組

相關文章
相關標籤/搜索