之前寫了:用程序解決兒子的問題:她們分別買了什么?,這是第二篇
問題
一個(gè)國王要獎給大臣寶石,他對大臣說:袋子里有紅寶石和綠寶石,紅寶石有5個(gè),綠寶石6個(gè),你可以取任意數(shù)量的寶石,如果紅寶石的數(shù)量和綠寶石的數(shù)量相同,這些寶石就歸你,如果不相同,你就得不到寶石,你要取幾個(gè)寶石呢?
分析
如果紅寶石和綠寶石數(shù)量相同,那必須取偶數(shù)個(gè),也就是2、4、6、8、10,很容易分析,取2個(gè)和10個(gè)贏的的概率是6/11,那取4個(gè)、6個(gè)、8個(gè)贏的概率是多少呢?用概率分析就有點(diǎn)難了,不如直接寫程序計(jì)算。
程序
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():
nums = [2, 4, 6, 8, 10]
total = 1100000
for num in nums:
win = solve(total, num)
print('試驗(yàn){}次取{}個(gè)寶石,贏了{(lán)}次,贏的概率*寶石數(shù)量: {}'.format(total, num, win, win/total * num))
if __name__ == '__main__':
main()
某次輸出結(jié)果
試驗(yàn)1100000次取2個(gè)寶石,贏了599902次,贏的概率*寶石數(shù)量: 1.0907309090909092
試驗(yàn)1100000次取4個(gè)寶石,贏了500568次,贏的概率*寶石數(shù)量: 1.8202472727272727
試驗(yàn)1100000次取6個(gè)寶石,贏了475705次,贏的概率*寶石數(shù)量: 2.5947545454545455
試驗(yàn)1100000次取8個(gè)寶石,贏了499749次,贏的概率*寶石數(shù)量: 3.634538181818182
試驗(yàn)1100000次取10個(gè)寶石,贏了599903次,贏的概率*寶石數(shù)量: 5.453663636363636
因?yàn)榻Y(jié)果又一定的隨機(jī)性,我們推斷取2個(gè)和10個(gè)贏的概率,取4個(gè)和取8個(gè)贏的概率是一樣的。結(jié)合概率和數(shù)量,取10個(gè)寶石最有利。