多次枚舉:
實(shí)例1
口袋中有5只紅球,4只白球。隨機(jī)從口袋中取出3個(gè)球,取出1個(gè)紅球2個(gè)白球的概率
for(int j=0; j<3; j++) //取3個(gè)球進(jìn)行3次循環(huán)
{
int k = rand() % (9-j); //下標(biāo)的確定 確定范圍 9-j 是重點(diǎn)
if(x[k]==1)
a++;
else
b++;
x[k] = x[9-j-1]; //將取出數(shù)向后移動(dòng)
}
if(a==1 && b==2) n++;//取出1個(gè)紅球2個(gè)白球時(shí)進(jìn)行計(jì)數(shù)
}
printf("概率=%f/n", n/100000.0*100);</SPAN>
下面的代碼解決了這個(gè)問(wèn)題。其中的y表示紅球至少出現(xiàn)的次數(shù)。
這與前文的問(wèn)題是等價(jià)的。因?yàn)槿绻?0個(gè)球,要求紅球數(shù)大于白球數(shù),則等價(jià)于至少取出16個(gè)紅球。
double pro(int m, int n, int x, int y)
{
if(y>x) return 0;
if(y==0) return 1; //對(duì)y沒(méi)有要求
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>
新聞熱點(diǎn)
疑難解答
圖片精選