关于一个小猜数字游戏 猜对的几率是多大

每一两天都要和同事打赌喝可乐,今天我们自己想了一个打赌方法,因为比较新鲜,打完之后喝着可乐想这个方式猜者猜中的几率,觉得还不是很好算,所以贴出来共享,有兴趣的也可以赌一赌,呵呵 

方式为: 
甲方从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左右 符合理论值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值