概率的問題:使用遞歸與多次試驗(yàn)?zāi)M的分析
多次枚舉:
實(shí)例1
口袋中有5只紅球,4只白球。隨機(jī)從口袋中取出3個(gè)球,取出1個(gè)紅球2個(gè)白球的概率
<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個(gè)紅球用5個(gè)1表示 4個(gè)白球用4個(gè)2表示
int a = 0; // 取到的紅球的數(shù)目
int b = 0; // 取到的白球的數(shù)目
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ù)向后移動
}
if(a==1 && b==2) n++;//取出1個(gè)紅球2個(gè)白球時(shí)進(jìn)行計(jì)數(shù)
}
printf("概率=%f\n", n/100000.0*100);</SPAN>
實(shí)例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; // 假設(shè)沒有相同
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>
遞歸:
某個(gè)袋子中有紅球m個(gè),白球n個(gè)。現(xiàn)在要從中取出x個(gè)球。紅球數(shù)目多于白球的概率
下面的代碼解決了這個(gè)問題。其中的y表示紅球至少出現(xiàn)的次數(shù)。
這與前文的問題是等價(jià)的。因?yàn)槿绻?0個(gè)球,要求紅球數(shù)大于白球數(shù),則等價(jià)于至少取出16個(gè)紅球。
<SPAN style="FONT-SIZE: 18px">/*
m: 袋中紅球的數(shù)目
n: 袋中白球的數(shù)目
x: 需要取出的數(shù)目
y: 紅球至少出現(xiàn)的次數(shù)
*/
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>
相關(guān)文章
C++ min/max_element 函數(shù)用法詳解
這篇文章主要介紹了C++ min/max_element 函數(shù)用法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
C語言基本排序算法之插入排序與直接選擇排序?qū)崿F(xiàn)方法
這篇文章主要介紹了C語言基本排序算法之插入排序與直接選擇排序?qū)崿F(xiàn)方法,結(jié)合具體實(shí)例形式分析了插入排序與直接選擇排序的定義、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-09-09
C++構(gòu)造析構(gòu)賦值運(yùn)算函數(shù)應(yīng)用詳解
構(gòu)造函數(shù)主要作用在于創(chuàng)建對象時(shí)為對象的成員屬性賦值,構(gòu)造函數(shù)由編譯器自動調(diào)用,無須手動調(diào)用;析構(gòu)函數(shù)主要作用在于對象銷毀前系統(tǒng)自動調(diào)用,執(zhí)行一 些清理工作2022-09-09
JS調(diào)用C++函數(shù)拋出異常及捕捉異常詳解
這篇文章主要介紹了js調(diào)用C++函數(shù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2021-08-08
C++?折疊參數(shù)包詳解(悄然增強(qiáng)編程效率)
折疊參數(shù)就是一個(gè)參數(shù)包, 代表是多個(gè)未知,tuple元組就是一個(gè)折疊參數(shù)的使用,這篇文章主要介紹了C++?折疊參數(shù)包悄然增強(qiáng)編程效率,需要的朋友可以參考下2023-05-05
C++實(shí)現(xiàn)LeetCode(27.移除元素)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(27.移除元素),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C++靜態(tài)庫與動態(tài)庫文件的生成和使用教程
庫文件是計(jì)算機(jī)上的一類文件,可以簡單的把庫文件看成一種代碼倉庫,它提供給使用者一些可以直接拿來用的變量、函數(shù)和類,下面這篇文章主要給大家介紹了關(guān)于C++靜態(tài)庫與動態(tài)庫文件的生成和使用的相關(guān)資料,需要的朋友可以參考下2023-03-03
C語言之整數(shù)與浮點(diǎn)數(shù)運(yùn)算的類型轉(zhuǎn)換規(guī)則詳解
這篇文章主要介紹了C語言之整數(shù)與浮點(diǎn)數(shù)運(yùn)算的類型轉(zhuǎn)換規(guī)則,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2025-03-03

