A stick break 3 pieces, what 's percentage of form a triangle? 一段木棍剪成三段,能够组成三角形的概率是多少?
好题!
eric的做法如下:
emma的做法如下:
大喵老师问同学们,两种做法用python模拟看结果是否相同?
eric的做法:假设eric不知疲倦地实验了10000次。每次随机生成两个位置,剪断后获取三段长度判断是否满足:两个最短的相加是否大于最长的?
import random
random.seed()
num = 10000
def formTriangle(num,lng=100):
form = 0
for _ in range(num):
ratio_1st = random.random()
ratio_2nd = random.random()
lft,rgt = lng*ratio_1st,lng*(1-ratio_1st)
c_lft = lft * ratio_2nd
a,b,c = sorted([lft-c_lft,c_lft,rgt])
form += a + b > c
c_rgt = rgt * ratio_2nd
a,b,c = sorted([rgt-c_rgt,c_rgt,lft])
form += a + b > c
return form
print(formTriangle(num,lng=100))
2469
10000次实验模拟其中某次的结果之一是 2469
增加模拟次数为:100000
num = 100000
print(formTriangle(num,lng=100))
25031
接下来看emma的做法,注意emma分两步。
第一步先剪成两段,第二步是随机选择其中的一小段,再选择好后,再随机选择位置剪断。看上图。
假设:我们认为第二步随机选择的结果必然是左边或者右边的一小段,此处emma采用random.choice(lft,rgt)
看emma的代码:
import random
random.seed()
num = 10000
def formTriangle(num,lng=100):
form = 0
for _ in range(num):
ratio_1st = random.random()
lft,rgt = lng*ratio_1st,lng*(1-ratio_1st)
select = random.choice([lft, rgt])
ratio_2nd = random.random()
if select == lft:
c_lft = lft * ratio_2nd
a,b,c = sorted([lft-c_lft,c_lft,rgt])
form += a + b > c
else:
c_rgt = rgt * ratio_2nd
a,b,c = sorted([rgt-c_rgt,c_rgt,lft])
form += a + b > c
return form
print('emma solve: ',formTriangle(num,lng=100))
emma solve: 1900
10000次实验模拟其中某次的结果之一是 2469
增加模拟次数为:100000
emma solve: 19389
丁丁猫的同学们思考几个问题:
1、到底谁是对的?
2、如何用数学方法计算证明?
3、上周的课程讲到的这道题与今天的概率问题有什么共同遵循的规律?
上周的题目挑战:
全年级有500名学生,老师统计发现戴口罩和戴眼镜的同学后发现: 所有不戴口罩的同学之中,有2/3的同学不戴眼镜; 所有不戴眼镜的同学之中,有3/4的同学不戴口罩; 有60名同学既戴口罩,又戴眼镜;
请问: 戴口罩的同学有多少? 戴眼镜的同学有多少?
我们似乎正在接近某个经典的概率公式,你能发现这个公式吗?
本文由 mdnice 多平台发布