1.問題描述及思路
生日悖論是指 在一羣人中, 出現兩个人(或多个人)的生日在同一天的概率遠比直覺判斷的大得多. 因此也可以解釋爲啥每个班都有人會在同一天過生的現象.
其實從數學上求解這个問題更簡單, n个人中出現同天生日的概率爲 1 - 365!/(365-n)!/(365**n), 但既然是編程解決, 就得用仿真的思路, 而不是代數思路.
要驗證這个情況, 可以用計算機隨機生成生日組合, 在多次(比如一百萬次)模擬後統計並計算概率.
以python來說, 引入隨機數模凷random即可:
首先指定人數, 然後生成相應人數的隨機生日組合列表, 再檢查生日列表中有無重復生日出現, 反復執行這个流程到指定的次數(比如一百萬次), 期間統計出現相同生日的次數, 就可計算出概率.
2.實現代碼
# 計算一羣人中出現相同生日的概率
import random
SIMULATION_TIMES = 1000000 # 模擬次數
people = max(2, int(input('請輸入人數: '))) # 確保至少2人
def generate_bir(people):
"""生成指定人數的隨機生日列表"""
birs = []
for i in range(people):
bir_mon = random.randint(1, 12)
if bir_mon in [1, 3, 5, 7, 8, 10, 12]:
bir_day = random.randint(1, 31)
elif bir_mon == 2: