これらのバッジが等確率で出現するとした場合、いったい何本 Teao を買えば 全12種類そろうでしょうか?
つまり n 本 (n>=12) かったときに全種類そろう確率を P(n) とした時、 n→∞にしたときの期待値 E を求めてください。
     ∞
 E = Σ n * p(n)
    n=12
(defun fact (n)
  (if (<= n 1)
      1
      (* n (fact (1- n)))))
;;;
;;;  n 回引いてちょうど k 種類集まる組合せの数:
;;;
;;;             k
;;;            ---      i                n
;;;  f(k,n) =  >    (-1)  k C (k-i) (k-i)
;;;            ---
;;;            i=0
;;;
;;;  Pr( n 回引いてちょうど k 種類集まる確率)
;;;
;;;  = Pr( n-1 回引いてちょうど k-1 種類集まる確率) * 1/k * k
;;;
;;;  = f(k-1,n-1) / k^(n-1)
;;;
(defun comb (k n)
  (let ((result 0.0d1))
    (do ((i 0 (1+ i)))
	((> i k) result)
      (let ((temp (/ (fact k) (* (fact (- k i)) (fact i)))))
	(if (evenp i)
	    (incf result (* temp (expt (- k i) n)))
	    (decf result (* temp (expt (- k i) n))))))))
(defun main (k)
  (do ((n k (1+ n)))
      ((> n 100))
    (format t "~d~t~d~%" n (/ (comb (1- k) (1- n)) (expt k (1- n))))))
#include#include double fact(int n) { int i,result = 1; for (i=1;i<=n;i++) result *= i; return (double)result; } double comb(int k, int n) { double sum = 0; double tmp; int i; for (i=0;i<=k;i++) { if (i%2 == 0) tmp = 1; else tmp = -1; sum += (tmp * (fact(k)/fact(k-i)/fact(i)) * pow(k-i,n)) ; } return sum; } void main(void) { int n; double p,e = 0; for (n=12;n<=100;n++) { p = comb(12-1,n-1)/pow(12,n-1); e += p*n; printf("%3d %50.50f\n",n,p); } printf("E = %50.50f\n",e); } 
この結果を使いグラフを描くと以下のようになります.
横軸が買った本数。縦軸がその本数で全種類そろう確率です。
 
これを名付けて
E = 37.23
となりました。 37本程度買えばそろうということです。
さらに 累計確率を求めると以下のようになります。 横軸が買った本数。縦軸が、その本数までにそろう確率です。
 
100本かってそろう確率は 0.998 です。