1. 程式人生 > >sgu 495 Kids and Prizes

sgu 495 Kids and Prizes

概率 1.0 如果 pri pre class AI 有獎 include

題意:

有m個人,n個盒子,每個盒子一開始都裝了一個獎品。

每一次,一個人從n個盒子裏面隨機抽出一個,如果裏面有獎品,就把獎品拿出來;如果沒有,就原封不動放回。

問抽到獎品的個數的期望。

思路:

一開始從人去思考,怎麽也推不出來。

每次抽是獨立的,如果從禮物去思考的話,每次一個禮物被抽中的概率是1 /n,那麽它不被抽中的概率就是 (n-1) / n。

抽m次一個禮物不被抽中的概率就是((n-1) / n) ^ m。

那麽n個禮物抽了m次之後剩下的個數的期望是n * ((n-1) / n) ^ m,被抽中的期望,也是人得到的個數的期望是n - n * ((n-1) / n) ^ m。

有關概率的問題,應該要從反面多思考,逆向思考,從不同角度思考。

代碼:

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <algorithm>
 4 using namespace std;
 5 double qp(double k,int n)
 6 {
 7     if (n == 0) return 1.0;
 8     double ans = qp(k,n / 2);
 9     ans *= ans;
10     if (n&1) ans *= k;
11     return ans;
12 }
13
int main() 14 { 15 int n,m; 16 while (scanf("%d%d",&n,&m) != EOF) 17 { 18 double ans; 19 ans = 1.0 * n * (1.0 - qp(1.0 * (n-1)/n,m)); 20 printf("%.10f\n",ans); 21 } 22 return 0; 23 }

sgu 495 Kids and Prizes