60人の社員が,自分以外の 3 人をランダムに選んで ThanksCard を送る.ある人が 10 枚以上のカードをもらえる確率は? というクイズ.
特にかっこいい方法が思いつかないので正攻法で.自分以外の誰かが選んだ 3 人に自分が含まれる確率は 3/59.含まれない確率は 56/59.各人の選択は独立なので,59 人のうち k 人が自分を選んでくれる確率は
C(59, k) * (3/59)^k * (56/59)^(59-k)
ただし,C(x, y) は x 個から y 個を選ぶ組合せの数.これを 10 以上の k について総和すればよい,のかな.
(defun prod-n-m (n m) ;; n * (n-1) * ... * m (if (< n m) 1.0 (* 1.0 n (prod-n-m (- n 1) m)))) (defun power (a k) ;; a^k (if (<= k 0) 1.0 (* 1.0 a (power a (- k 1))))) (defun pr-k-cards (k) (* (/ (prod-n-m 59 (- 60 k)) (prod-n-m k 1)) (power (/ 3.0 59) k) (power (/ 56.0 59) (- 59 k)) 100)) (- 100 (apply '+ (mapcar 'pr-k-cards '(0 1 2 3 4 5 6 7 8 9)))) 0.0732554296409802
0.073% か.せつない.でもまあ期待値が 3 だから,こんなもんか.
(あ,これコードの部分だけうっすら見えるな.まいいか)
最終更新時間: 2009-01-04 15:31