c

codeye

V1

2022/10/26阅读:25主题:默认主题

一段木棍剪成三段,能够组成三角形的概率是多少

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名同学既戴口罩,又戴眼镜;

请问: 戴口罩的同学有多少? 戴眼镜的同学有多少?

我们似乎正在接近某个经典的概率公式,你能发现这个公式吗?

分类:

后端

标签:

后端

作者介绍

c
codeye
V1