機率的問題:使用遞迴與多次實驗類比的分析_C 語言

來源:互聯網
上載者:User

多次枚舉:

執行個體1

口袋中有5隻紅球,4隻白球。隨機從口袋中取出3個球,取出1個紅球2個白球的機率

複製代碼 代碼如下:

<SPAN style="FONT-SIZE: 18px"> srand( (unsigned)time( NULL ) );
 int n = 0;
 for(int i=0; i<100000; i++)
 {
  char x[] = {1, 1, 1, 1, 1, 2, 2, 2, 2};//5個紅球用5個1表示 4個白球用4個2表示
  int a = 0;  // 取到的紅球的數目
  int b = 0;  // 取到的白球的數目

  for(int j=0; j<3; j++)  //取3個球進行3次迴圈
  {
   int k = rand() % (9-j);  //下標的確定  確定範圍  9-j 是重點
   if(x[k]==1)
    a++;
   else
    b++;

   x[k] = x[9-j-1]; //將取出數向後移動
  }
  if(a==1 && b==2)  n++;//取出1個紅球2個白球時進行計數
 }
 printf("機率=%f\n", n/100000.0*100);</SPAN>


執行個體2
複製代碼 代碼如下:

<SPAN style="FONT-SIZE: 18px">#define N 30
......
 int a[N];
 srand( time( NULL ) );
 int n = 0;
 for(int k=0; k<10000; k++)
 {
  for(int i=0; i<N; i++)
   a[i] = rand() % 365;
  bool tag = false; // 假設沒有相同
  for(i=1; i<N; i++)
  {
   for(int j=0; j<i; j++)
   {
    if(a[i]==a[j])
    {
     tag = true;
     break;
    }
   }
   if(tag) break;
  }
  if(tag) n++;
 }
 printf("%f\n", 1.0 * n / 10000 * 100);
</SPAN>

遞迴:

某個袋子中有紅球m個,白球n個。現在要從中取出x個球。紅球數目多於白球的機率

下面的代碼解決了這個問題。其中的y表示紅球至少出現的次數。

這與前文的問題是等價的。因為如果取30個球,要求紅球數大於白球數,則等價於至少取出16個紅球。

複製代碼 代碼如下:

<SPAN style="FONT-SIZE: 18px">/*
   m: 袋中紅球的數目
   n: 袋中白球的數目
   x: 需要取出的數目
   y: 紅球至少出現的次數
*/

double pro(int m, int n, int x, int y)
{
 if(y>x) return 0;
 if(y==0) return 1;  //對y沒有要求
 if(y>m) return 0;
 if(x-n>y) return 1;  //把白球全部取出,剩下就是紅球 紅球比至少取出還多,機率為1
 double p1 = pro(m-1,n,x-1,y-1) ; 
 double p2 = pro(m,n-1,x-1,y);
 return (double)m/(m+n) * p1 + (double)n/(m+n) * p2;
}</SPAN>


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.