笔试巧用随机数
一个鸡贼的技巧,注意那些输出为「二值」的题目,二值就是类似布尔值,或者 0 和 1 这种组合有限的。
比如说很多题目是这样,巴拉巴拉给你说一堆条件,然后问你输入的数据能不能达成这些条件,如果能的话请输出 YES
,不能的话输出 NO
。
如果你会做当然好,如果不会做怎么办?
首先这样提交一下:
print("YES")
看下 case 通过率,假设是 60%,那么说明结果为 YES 有 60% 的概率,所以可以这样写代码:
import random
def number_of_certain_prob(seq, prob):
x = random.uniform(0, 1)
cumulative_prob = 0.0
for item, item_prob in zip(seq, prob):
cumulative_prob += item_prob
if x < cumulative_prob:
break
return item
if __name__ == '__main__':
# 测试代码
seq = ["yes", "no"]
prob = [0.6, 0.4]
res = number_of_certain_prob(seq, prob)
print(res)
验证如下:
if __name__ == '__main__':
# 测试代码
seq = ["yes", "no"]
prob = [0.6, 0.4]
a = 0
b = 0
repeat = 100000
for i in range(repeat):
result = number_of_certain_prob(seq, prob)
if result == "yes":
a = a + 1
elif result == "no":
b = b + 1
print(a / repeat)
print(b / repeat)
输出:
0.60252
0.39748