|
发表于 2023-9-16 05:53:26
|
显示全部楼层
这道题的题目存在一点问题,前 + 中 + 后 + 最后 = 98 分,所以我这里擅自把题目做了修改~
一份满分100分的试卷,共有44道题:
前面15道题每题2分,一道题正确率是25%。
中间 5道题每题2分,一道题正确率是50%。
后面15道题每题2分,一道题正确率是25%。
最后10道题每题3分,一道题正确率是25%。
问达到60分的概率是多少?
下面是我基于这个修改尝试进行的解答……
这道题真的太复杂了,我只能先假定 “甲、乙、丙、丁” 前、中、后、最后四种题目是独立的,
后面得想办法找到所有可能的符合条件(总分超过60分)的组合,
那么它们至少应得的分值:
甲:15 * 0.6 = 9,至少需要答对 9 道题
乙:5 * 0.6 = 3,至少需要答对 3 道题
丙:15 * 0.6 = 9,至少需要答对 9 道题
丁:10 * 0.6 = 6,至少需要答对 6 道题
那么按照二项分布的计算法则:
甲:B(9~15; 15, 1/4)
乙:B(3~5; 5, 1/2)
丙:B(9~15; 15; 1/4)
丁:B(6~10; 10; 1/4)
然后我用 Python 算了一下:
- from scipy.stats import binom
- # 计算甲的二项分布结果
- a = sum(binom.pmf(k, 15, 0.25) for k in range(9, 16))
- # 计算乙的二项分布结果
- b = sum(binom.pmf(k, 5, 0.5) for k in range(3, 6))
- # 计算丙的二项分布结果
- c = sum(binom.pmf(k, 15, 0.25) for k in range(9, 16))
- # 计算丁的二项分布结果
- d = sum(binom.pmf(k, 10, 0.25) for k in range(6, 11))
- print(f"达到60分的概率是 -> {a * b * c * d * 100:.6f}%")
复制代码
答案暂时是:达到60分的概率是 -> 0.000017%
但这个不是最终的答案,应该再加上所有其它可能的组合,
比如甲只答对 1 题,但乙、丙、丁多答对几题,也可以使得总分超过 60,
越想越复杂……
暂时放弃……
直接计算不行,咱就换模拟吧~
用蒙特卡洛模拟法:
- import numpy as np
- def simulate_exam(n_trials=1000000):
- scores = []
- for _ in range(n_trials):
- score = 0
- # 前面15道题
- score += np.random.choice([0, 2], size=15, p=[0.75, 0.25]).sum()
- # 中间5道题
- score += np.random.choice([0, 2], size=5, p=[0.5, 0.5]).sum()
- # 后面15道题
- score += np.random.choice([0, 2], size=15, p=[0.75, 0.25]).sum()
- # 最后10道题
- score += np.random.choice([0, 3], size=10, p=[0.75, 0.25]).sum()
- scores.append(score)
- return np.mean(np.array(scores) >= 60)
- print(simulate_exam())
复制代码
把模拟的数量定在百万级别的时候,出现了 3 次 60 分以上的结果,
跟前面二项分布算出来的差了一个量级……
|
评分
-
参与人数 1 | 荣誉 +5 |
鱼币 +5 |
贡献 +3 |
收起
理由
|
陶远航
| + 5 |
+ 5 |
+ 3 |
鱼C有你更精彩^_^ |
查看全部评分
|