PHP抽奖程序之几率算法 (2011-10-26)
做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];
由杀人游戏写程序分析 (2011-09-16)
用PHP分析杀人游戏 ,仅供参考
某地发生了一起谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯中的一个。以下为4个嫌疑犯的供词。
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说。
已知3个人说了真话,1个人说的是假话。请根据这些信息,写一个程序来确定到底谁是凶手
<php
$men = array ( 'A','B','C','D' ) ;
foreach ( $men as $man ){
if( ($man!='A')+($man=='C')+($man=='D')+($man!='D') == 3 ){
echo $man . ' is the killer.' ;
}
}

牛。。求源码分享,正在学习中,,