之前写了:用程序解决儿子的问题:她们分别买了什么?,这是第二篇
问题
一个国王要奖给大臣宝石,他对大臣说:袋子里有红宝石和绿宝石,红宝石有5个,绿宝石6个,你可以取任意数量的宝石,如果红宝石的数量和绿宝石的数量相同,这些宝石就归你,如果不相同,你就得不到宝石,你要取几个宝石呢?
分析
如果红宝石和绿宝石数量相同,那必须取偶数个,也就是2、4、6、8、10,很容易分析,取2个和10个赢的的概率是6/11,那取4个、6个、8个赢的概率是多少呢?用概率分析就有点难了,不如直接写程序计算。
程序
import random
from functools import reduce
def solve(count, num):
win = 0
for i in range(count):
box = [1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0]
picked = []
for j in range(num):
r = random.randint(0, len(box) - 1)
ball = box[r]
box.remove(ball)
picked.append(ball)
summary = reduce(lambda x, y: x+y, picked)
if summary == num // 2:
win += 1
return win
def main():
win = solve(110000, 2)
print(win)
win = solve(110000, 4)
print(win)
win = solve(110000, 6)
print(win)
win = solve(110000, 8)
print(win)
win = solve(110000, 10)
print(win)
if __name__ == '__main__':
main()
某次输出结果
60087
50041
47533
50171
59995
可以看到取4、6、8个赢的概率都低于取10个概率,显然取10个宝石最赚啦。
网友评论