最近有個需求,有點像抽抽獎券
假設有5個人A B C D E
A手上有5張抽獎券
B手上有12張抽獎券
C手上有15張抽獎券
D手上有18張抽獎券
E手上有20張抽獎券
總共70張
當然抽獎券都是記自己名字的
他們將抽獎券都丟入同一個箱子
這時隨機抽出一張
A被抽中的機率就是5/70
B被抽中的機率就是12/70
C被抽中的機率就是15/70
D被抽中的機率就是18/70
E被抽中的機率就是20/70
當然真正遇到的問題可能有上萬人,每個人有幾萬張抽獎券之類的
我自己想過兩種寫法
第1種是最笨的做法
把ABCDE都丟入一個list,有幾張就丟幾個
[A,A,A,A,A,B,B,B,B,B,B,B,B,B,B,B,B,C......]
然後就用亂數隨機抽出一個就行了
但遇到上萬人這做法太沒效率了而且很佔記憶體甚至LIST可能會爆炸
第2種是用數值範圍
先把總和加起來是70的話,就抽1~70的數字
若是抽中1~5就是A
6~17就是B
18~32就是C
33~50就是D
51~70就是E
但在抽之前就得先算好每個人的範圍,感覺也蠻沒效率的
想請教高手是否有比較有效率的做法呢? 感謝!