鱼C论坛

 找回密码
 立即注册
查看: 3216|回复: 12

[技术交流] [python求解趣味题]美国25美分硬币收集问题

[复制链接]
发表于 2017-2-27 13:43:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 jerryxjr1220 于 2017-2-27 14:47 编辑

原题目:美国的25分硬币共有50种,上面有50个州的图案,如果我们每次得到的硬币是随机的,则大约收集多少枚25美分的硬币可以收集全?

@冬雪雪冬 @~风介~
召唤版主来解题
游客,如果您要查看本帖隐藏内容请回复


我不理解的是背后的数学理论
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-2-27 17:08:19 | 显示全部楼层
楼主不知道版主是可以免回复看隐藏内容的么?另外,至少、至多这些术语可以理解,大约是什么鬼?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-27 17:11:45 From FishC Mobile | 显示全部楼层
~风介~ 发表于 2017-2-27 17:08
楼主不知道版主是可以免回复看隐藏内容的么?另外,至少、至多这些术语可以理解,大约是什么鬼? ...

因为这本身是概率题吧,所以没法用至多或至少描述,大约应该表示是一个近似值吧,我是这么理解的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 17:37:45 | 显示全部楼层
大概就是225上下吧
  1. import random
  2. huizong=[]
  3. a,b=[],[]
  4. for i in range(50):
  5.     a.append(i)
  6. for c in range(1000):
  7.     b=a.copy()
  8.     cishu=0
  9.     while b!=[]:
  10.         x=random.randint(0,49)
  11.         if x in b:
  12.             b.remove(x)
  13.         cishu+=1
  14.     huizong.append(cishu)
  15. print((sum(huizong)//1000)+1)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 17:38:37 | 显示全部楼层
看来至少我的思路没问题,要不然用概率算太麻烦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 17:39:29 | 显示全部楼层
我加了个1 是为了向上取整,总不能说我收集半次啊,所以整除后加了1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-27 18:16:50 From FishC Mobile | 显示全部楼层
余欲渔 发表于 2017-2-27 17:39
我加了个1 是为了向上取整,总不能说我收集半次啊,所以整除后加了1

编程写很容易,我想知道的是背后的数学逻辑
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 19:20:11 | 显示全部楼层
用概率方式来算就是理论分析需要多少次,这样求解就是实际操作看看到底需要多少次,理论分析只要大家思维都同样的严谨度,结果就会相同,实际操作每个人操作的结果可能都不一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 19:37:11 | 显示全部楼层
jerryxjr1220 发表于 2017-2-27 18:16
编程写很容易,我想知道的是背后的数学逻辑

我感觉这样写的话更接近概率分析的方法,大概就是第一次是一定能收集到,因为x必定大于y,第二次x大于y的概率是49/50,那如果第二次不凑巧,也随到了1,那第三次的概率还将是49/50
  1. import random
  2. y,cs=0,0
  3. while True:
  4.     cs+=1
  5.     x=random.randint(1,50)
  6.     if x>y:
  7.         y+=1
  8.     if y==50:
  9.         break        
  10. print(cs)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-27 19:43:36 | 显示全部楼层
jerryxjr1220 发表于 2017-2-27 18:16
编程写很容易,我想知道的是背后的数学逻辑

下面这是给你的最终答案,不谢,因为我上面一个代码谢出来,基本我就想通了,第一次数学概率分析是1次必定得到,那第二次必定得到需要50/49次,第三次必定得到就是50/48次,以此类推,就有了下面的代码,简单的可怕
  1. cs=0
  2. for i in range(50):
  3.     cs+=50/(50-i)
  4. print(cs)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-2-27 20:33:29 From FishC Mobile | 显示全部楼层
本帖最后由 jerryxjr1220 于 2017-2-27 23:04 编辑
余欲渔 发表于 2017-2-27 19:43
下面这是给你的最终答案,不谢,因为我上面一个代码谢出来,基本我就想通了,第一次数学概率分析是1次必 ...


不错!想明白了!

更通俗一点的讲法应该是收集第一枚硬币的概率是50/50,也就是说1枚硬币就可以必定收集到;那么收集第二枚硬币的概率就是49/50(因为要除去第一枚已经收集到的硬币),所以需要的硬币数就是50/49(概率的倒数);同理可以求之后所有的硬币数量。
汇总就是sum = 50/50+50/49+50/48+...+50/2+50/1 = 50*(1+1/2+1/3+...+1/50) = 50*(ln(50)+C)其中C为欧拉常数,约等于0.57721566490153286060651209 = 224.46193351648395

所以,数学的求解公式就是 n*(ln(n)+C)!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-2-23 15:32:14 | 显示全部楼层
本帖最后由 shigure_takimi 于 2018-2-23 15:36 编辑
  1. import random

  2. # 模拟收集齐50枚硬币需要多少次
  3. def simulationOnce():
  4.     myCollection = set()
  5.     count = 0
  6.     while True:
  7.         coin = random.randint(1, 50)
  8.         count += 1
  9.         myCollection.add(coin)
  10.         if len(myCollection) == 50:
  11.             return count

  12. # 模拟n次,取平均数
  13. def simulationAver(n):
  14.     count = 0
  15.     for i in range(n):
  16.         count += simulationOnce()
  17.     return count//n

  18. print('模拟{}次:大概需要收集{}枚硬币'.format(1, simulationAver(1)))
  19. print('模拟{}次:大概需要收集{}枚硬币'.format(100, simulationAver(100)))
  20. print('模拟{}次:大概需要收集{}枚硬币'.format(1000, simulationAver(1000)))
  21. print('模拟{}次:大概需要收集{}枚硬币'.format(5000, simulationAver(5000)))

  22. # 通过多次模拟取平均数,可以认为大概在225左右。
复制代码
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-16 08:07:04 From FishC Mobile | 显示全部楼层
学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 03:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表