document.write('
这道题要求一个概率的问题,由于10个房间里放的金币的数量是随机的,因此,在编程实现的时候首先需要生成10个随机数来模拟10个房间里金币的数量。然后判断通过这种策略是否能邑拿到最多的金币。如果仅仅通过一次模拟来求拿到最多金币的概率显然是不准确的,那么就需要进行多次模拟,通过记录模拟的次数m,拿到最多金币的次数n,从而可以计算出拿到最多金币的概率n/m。显然这个概率与金币的数量以及模拟的次数有关系。模拟的次数越多越能接近真实值。下面以金币数为1到10的随机数,模拟次数为1000次为例给出实现代码:
import random
"""
方法功能: 总共n个房间, 判断用指定的策略是否能拿到最多金币
返回值: 如果能拿到返回True, 否则返回False
"""
def getMaxNum(n):
if n<1:
print "参数不合法"
return
a=[None]*n
#随机生成n个房问里金币的个数
i=0
while i<n:
a[i]=random.uniform(1,n) #生成1~n的随机数
i+=1
#找出前四个房间中最多的金币个数
max4=0
i=0
while i<4:
if a[i]>max4:
max4=a[i]
i+=1
i=4
while i<n-1:
if a[i]>max4: #能拿到最多的金币
return True
i+=1
return False# 不能拿到最多的金币
if __name__=="__main__":
monitorCount=1000+0.0
success=0
i=0
while i<monitorCount:
if getMaxNum(10):
success+=1
i+=1
print success/monitorCount
程序的运行结果为:
0.421
运行结果分析:
运行结果与金币个数的选择以及模拟的次数都有关系,而且由于是个随机问题,因此同样的程序每次的运行结果也会不同。
');