一 利用不均勻硬幣產生等概率
問題描述:有一枚不均勻的硬幣,丟擲此硬幣後,可用foo()表示其結果。已知foo()能返回0和1兩個值,其概率分別為0.6和0.4。問怎麼利用foo()得到另乙個函式,使得返回0和1的概率均為0.5。
問題分析:分析連續丟擲兩次硬幣的情況,正反面的出現有四種情況,概率依次為:
(1) 兩次均為正面:0.6*0.6=0.36
(2)第一次正面,第二次反面:0.6*0.4=0.24
(3)第一次反面,第二次正面:0.4*0.6=0.24
(4)兩次均為反面:0.4*0.4=0.16
可以看到中間兩種情況的概率是完全一樣的,於是問題的解法就是連續拋兩次硬幣,如果兩次得到的相同則重新拋兩次;否則根據第一次(或第二次)的正面反面情況,就可以得到兩個概率相等的事件。
[cpp]view plain
copy
intcoin()
} }
二利用均勻硬幣產生不等概率
問題描述:有一枚均勻的硬幣,丟擲此硬幣後,可用foo()表示其結果。已知foo()能返回0和1兩個值,其概率均為0.5。問怎麼利用foo()得到另乙個函式,使得返回0和1的概率分別為0.3和0.7。
問題分析:0和1隨機生成,可以理解為二進位制。可以令a=foo()*2^4+foo()*2^3+foo()*2^2+foo()*2^1+foo()等概率生成0-31的所有數,去掉30和31後,在0-29之間進行乙個%3輸出。
[cpp]view plain
copy
intgenerator()
intfun2()
// 3*1 - 3*9 共9個能被3 整除,返回0
// 剩餘30 -9 = 21 個不能被整除,返回1
// 比例為9:21 = 3:7
if(a != 0)
} return
1;
}
概率(2) 硬幣
平均需要拋擲多少次硬幣,才會首次出現連續的 2個正面?首先,讓我們來考慮這樣乙個問題 k 枚硬幣擺成一排,其中每一枚硬幣都可正可反 如果裡面沒有相鄰的正面,則一共有多少種可能的情況?這可以用遞推的思想來解決。不妨用 f k 來表示擺放 k 枚硬幣的方案數。我們可以把這些方案分成兩類 最後一枚硬幣是反...
概率題(扔硬幣)
a 有 n 個硬幣,b 有 n 1 個硬幣,誰丟的正面多誰贏,問 a 不輸的概率?注意 不輸二字 我看了一些網上的答案,大多數寫的不是很流暢,所以我嘗試寫乙個清晰易懂的解法,相信小白也可以看懂。首先考察另乙個問題 我們分兩個階段來扔硬幣,假設在第一階段a扔了 n 枚硬幣,b扔了 n 枚硬幣。並且我們...
投擲硬幣(概率dp)
小hi有一枚神奇的硬幣。已知第i次投擲這枚硬幣時,正面向上的概率是pi。現在小hi想知道如果總共投擲n次,其中恰好m次正面向上的概率是多少。input 第一行包含兩個整數n和m。第二行包含n個實數p1,p2,pn。對於30 的資料,1 n 20 對於100 的資料,1 n 1000,0 m n,0 ...