演算法題 投籃比賽獲勝的概率

2022-01-28 16:30:55 字數 1242 閱讀 4136

近日,在和他人閒暇無事的時候,進行籃球投籃比賽。由於本人的投籃命中率比較低,而他的投籃命中率比較高。因此,定了乙個規則。採用積分制,初始積分為1分。他投籃,每投中乙個球,積分加1分,繼續投籃;投不中,換我投籃。我投籃,每投中乙個球,積分減1分,繼續投籃;投不中,換他投籃。若積分到11分,他獲勝;若積分減到0分,我獲勝。每局由他先投籃。

在進行若干局的比賽後,各有勝負。提出了乙個問題:他獲勝的概率是多少?

把問題數位化

a和b兩人進行投籃,a的命中率為70%,b的命中率為30%。初始積分為1分,每人投中繼續投,投不中換人投。a投中積分加1分,b投中積分減1分。積分為11分時,a獲勝;積分為0分時,b獲勝。問:a獲勝的概率是多少?

想到這個問題的時候,沒有絲毫頭緒。因此採用計算機模擬的方式來計算概率。

先寫了乙個函式

private function winner(byval steps as integer, byval paramarray p() as double) as boolean

dim i as integer = 1, j as integer = 0

do while i > 0 and i < steps

if mr.nextdouble < p(j) then

i += (-1) ^ j

else

j = 1 - j

end if

loop

return (i > 0)

end function

這個函式是模擬一次投籃。如下呼叫:winner(11, 0.7, 0.3)。表示a的投籃命中是0.7,b的投籃命中是0.3,積分到11表示a獲勝。函式返回true表示a獲勝,返回false表示b獲勝。

用了乙個迴圈,模擬1000000局,統計a獲勝的局數。得到如下結果:816628。

又反覆執行了9個1000000局,結果如下:816502、815734、816220、816972、816756、816473、816636、816226、816290。可以看出,a獲勝的概率大致為81.65%

如果積分到21分表示a獲勝,那麼a獲勝的概率是多少呢?

還是上面的**。模擬1000000局,統計a獲勝的局數。執行10次。結果如下:

816116、816358、816242、816436、816677、816319、815949、815822、815860、816616

a獲勝的概率大致為81.6%。沒有想象中的差異那麼大。只是略微少了那麼一點點。

那麼,如果用數學的計算方法,該如何計算呢?

求對弈獲勝概率的問題

甲乙兩人對弈,單局甲獲勝的概率為23,乙為13,現按照此規則對弈 任何一方獲勝次數比對手多n次,則獲勝,如果一直未能滿足這個條件,則一直對弈下去,求甲獲勝的概率。一局定輸贏,甲獲勝的概率為23。首先想明白以下3點 單數局不可能決出勝負,如果決出勝負,一定是偶數局 如果偶數局沒有決出勝負,則甲乙獲勝的...

一道概率演算法題

1我乙個同學 面試阿里實習生遇到的一道概率題 有個函式foo,返回0和1的概率都是50 讓你自己寫乙個函式,使返回0和1的概率分別是30 和70 這道題乍一看不知道咋下手,其實還很簡單的,相當於利用了遺傳演算法的思想,每次產生乙個數字,然後以為,一共產生四個數字,這樣就可以得到乙個四位的數字,即0 ...

leetcode演算法題 「馬」在棋盤上的概率

動態規劃 dp i j k 表示通過k步走到 i,j 的概率當我們想計算 r,c 有多少走法時,可以反向思考,有多少點可以走到 r,c 點,所以也就不難理解下面的狀態轉移 dp i j k dp i 2 j 1 k 1 dp i 2 j 1 k 1 dp i 2 j 1 k 1 dp i 2 j 1...