关于一个小猜数字游戏 猜对的几率是多大
每一两天都要和同事打赌喝可乐,今天我们自己想了一个打赌方法,因为比较新鲜,打完之后喝着可乐想这个方式猜者猜中的几率,觉得还不是很好算,所以贴出来共享,有兴趣的也可以赌一赌,呵呵?
方式为:?
甲方从1—5这五个数中选出一个数写在纸上,然后乙方来猜,乙方有两次机会,每次猜一个数,乙方第一次如果没有猜对,甲方要告诉乙方自己写的数比乙方猜的数大还是小,乙方再猜,如果再没有猜对就算乙方输。
原帖地址:http://www.iteye.com/topic/63032
?
?
第一次猜1 或 5 的猜中概率是40%:
假如第一次猜1: ?如果中了,就中了(概率1/5), 没中的话,再剩下的4/5 里面再猜,此时猜中的概率是1/4
故: 1/5+(4/5)*(1/4) = 2/5 = 40%
第一次猜5的情况类似
第一次猜3的猜中概率是 60%
第一次猜3:中的概率是1/5, 每种的话 再猜 此时猜中的概率是1/2?
故: 1/5+(4/5)*(1/2) = 3/5 = 60%
第一次猜2或4的猜中概率是60%
假如第一次猜2: ?如果中了,就中了(概率1/5), 没中的话,
剩下的有2种可能
a) 小于2的话,那只能是1了(概率是1)
b) ?大于2的话 ,再剩下的3个里面猜 猜中的概率是 1/3
故: 1/5+( (1/5)*1 + (3/5)*(1/3) ) = 3/5 = 60%
?
=======================================
如果第一次是随机猜的话那么:
?
(1/5)*40%*2 + (1/5)*60%*3 = 0.52 = 52%
=======================================
?
以下是程序模拟:
?
?
<?php$times = 1000000;$hitTimes = 0;for($i = 0; $i < $times; $i++){$guessedNum = mt_rand(1,5);$n = mt_rand(1,5);if ($n == $guessedNum) {$hitTimes++;continue;}if ($n > $guessedNum && $n == mt_rand(($guessedNum+1>5?5:$guessedNum+1),5)) {$hitTimes++;} else if ($n == mt_rand(1,($guessedNum-1<1?1:$guessedNum-1))) {$hitTimes++;}}echo '$hitTimes: ', $hitTimes, "\n";echo '$times: ', $times, "\n\n";echo '$hitTimes/$times:',$hitTimes/$times,"\n";
?运行结果输出:
?
$hitTimes: 520787
$times: 1000000
?
$hitTimes/$times:0.520787
?
?
?
模拟1百万次, 命中率徘徊于 0.52左右 符合理论值。