网站地图    收藏   

主页 > 后端 > php资料库 >

PHP抽奖程序之几率算法_自学php网

来源:自学PHP网    时间:2014-12-04 22:12 作者: 阅读:

[导读] 做PHP确实很少接触算法问题 前几天遇到一个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];	

 

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论