高考英语试卷上有一道7选5的选词填空,有没有想过为什么是7选5,而不是其他的,算一下7选5的得分概率,你便知道这到题的得分概率是所有题中最大的。
数学方法求解
问题转化为求解不得分的概率
假设正确答案为ABCDE,选项为ABCDEFG。
-
ABCDE的排列
- 每个选项都不在其正确位置上的排列数为44。
-
从ABCDE中选取4个,FG中选1个
- 情况1:F在E的位置上,排列数为9。
- 情况2:F不在E的位置上,排列数为44。
-
从ABCDE中选取3个
- 情况1:F在D的位置,且G不在E的位置的方法数为9;如果G在E的位置,则方法数为2。
- 情况2:F不在D的位置,且G不在E的位置的方法数为44;如果G在E的位置,则方法数为9。
全错的概率计算为:
错排数
n个元素对应n个位置编号为(1~n),元素编号与位置编号都不的对应的方法数为错排数,用 表示
通项式为:
代码求解
求解错排数
# 动态规划算法求解错排数
def derangement_dp(n):
if n == 0:
return 1
elif n == 1:
return 0
dp = [0] * (n + 1)
dp[0], dp[1] = 1, 0
for i in range(2, n + 1):
dp[i] = (i - 1) * (dp[i - 1] + dp[i - 2])
return dp[n]
# 示例
n = 5
print(derangement_dp(n))
求解得分概率
# 求解的是全错的概率
import numpy as np
import time
list_1 = [1, 2, 3, 4, 5, 6, 7]
count = 0 # 猜对次数
times = int(input("请输入运行次数:")) # 测试总次数
for i in range(int(times)):
# 生成标准答案
tmp = list_1[:]
for j in range(2):
num = np.random.randint(len(tmp))
tmp.remove(tmp[num])
np.random.shuffle(tmp)
# 随机猜一个答案
test = list_1[:]
for j in range(2):
num = np.random.randint(len(test))
test.remove(test[num])
np.random.shuffle(test)
# 生成数组比较
tmp = np.array(tmp)
test = np.array(test)
ans = tmp - test
# 全部答案错误
if 0 not in ans:
count += 1
print(f"全错次数{count}次")
print("全错的概率")
print(f"试验值:{count}/{times} = {count/times}")
print("理论值:", 607 / 1260)
迭代100000