“如何拿到最多金币” (python)

题目描述:10个房间里放着数量随机的金币,每个房间只能进入一次,并且只能在一个房间中拿金币。一个人采取如下策略:前4个房间只看不拿,随后的房间只要看到比前4个房间都多的金币就拿,否者就拿最后一个房间的金币。编程计算这种策略拿到最多的金币的概率。

分析与解答:这道题要求一个概率的问题,由于10个房间放的金币的数量是随机的,因此,在编程实现的过程中首先需要生成10个随机数来模拟10个房间里金币的数量。然后判断通过这种策略是否就能拿到最多的金币。如果仅仅通过一次模拟是不准确的,那么就需要进行多次模拟,通过记录模拟的次数m,拿到最多的金币次数n,从而计算拿到最多金币的概率n/m,这里我们以金币数量1~10, 模拟次数1000次为例来实现代码。

import random

def getMaxNum(n):
    if n < 1:
        print("参数不合法")
        return

    a = [None]*n
    # 随机生成n个房间里金币的个数
    i = 0
    while i < n:
        a[i] = random.uniform(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
    succes = 0
    i = 0
    while i < monitorCount:
        if getMaxNum(10):
            succes += 1
        i += 1
    print(succes/monitorCount)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值