原題在這裡
如果在一個賭場裏,每次下注的金額都是之前輸的金額的2.5倍,只要贏一把就可以翻本,是不是必贏???www.zhihu.com我特意用R寫了段代碼來說明這個問題。
在題主原來的問題上,為了儘可能真實,我們構造一個每晚去賭場賭博的場景!關於具體賭博遊戲呢,其實什麼都可以,這不是關鍵所在。為了簡單,我們只考慮一種規則,那就是:單次遊戲裏,投注x元,贏了拿回本金加x元,輸了呢就輸掉本金x元。
我還必須要加上兩個條件
- 本金不是無底洞!每晚只帶有限本金,輸光就只能回家
- 一晚上單次遊戲不能玩無限次,也有最多限制(你就是打麻將一晚上能搓多少圈?)
這裡還要準確定義一下什麼是單次遊戲:
- 第一局下注一元
- 一旦實現正的盈利(哪怕一元),或者輸光當晚攜帶的本金,就立即終止本次遊戲
- 每一次下注都是前面輸的金額總和的2.5倍。
程序在下面
gamble <- function(principal, prob){
# 這個函數代表一次遊戲!
# 我們輸入兩個數
# principal 你攜帶的本金數,不可以賒賬
# prob 你每次賭博贏的概率
profit = 0 # 這個變數代表你的盈利情況,一開始是零
# 這個循環條件很直觀
# 當你本次遊戲欠債超過的你攜帶的本金,今晚遊戲結束,你光著屁股回家
# 另外,當你本次遊戲一旦盈利,就立即退出這個函數,並開始下一個遊戲
while(profit + principal > 0 && profit <= 0){
if(profit == 0) bet = 1 #初始下注一元
else bet = -profit * 2.5 #初始之後每次下注都是損失的錢乘以2.5
if(runif(1) < prob){
# 如果你贏了
profit = profit + bet
}else{
# 如果你輸了
profit = profit - bet
}
}
# 最後,本次遊戲結束,返回你的盈利
return(profit)
}
# 這裡調節你今晚攜帶的本金數
principal = 100
# 這裡調節你今晚最多可以玩幾次遊戲
# 一百屬於比較正常的
n_times = 100
# 這個會存下所有結果
sums = NULL
# 為了你可以重複實驗結果而設定的種子
set.seed(0)
# 讓我們調整時光機,重複今晚5000次
for(nter in 1:5000){
# 開始整個遊戲,sum是你的當前總盈利
sum = 0
# 今晚你最晚只能玩一百次遊戲
for(iter in 1:n_times){
# 總盈利是單次遊戲盈利之和
sum= sum + gamble(principal,.5)
# 如果你的總盈利欠債把本金都輸光了
# 剩下的遊戲也別玩了,回家吧!
if(sum + principal < 0) break
}
sums = c(sums, sum)
}
hist(sums)
summary(sums)
把代碼複製粘貼到R裏試試就知道了。
最後會得到這樣一張直方圖