關於國王和100個囚犯

2021-08-30 10:13:21 字數 1612 閱讀 1714

今天在論壇看到一題目 國王和100個囚犯

大概在去年,朋友問過過我這個問題。

方案比較簡單:

首先,第一天出來的人,擔當「計數者」,它把燈開起來(原來開著就不必動了)

然後每天出來乙個囚犯。

如果他不是「計數者」,並且沒有關過燈, 並且燈開著, 那麼就把燈關了。

如果他是「計數者」, 如果燈關了, 就把他開起來(計數+1)。 當然如果燈被關了99次, 那麼就去和國王說吧。

但顯然也是乙個概論問題, 因為每次出來的囚犯隨機,

現在問題是,如果採用這個方案, 大概他們多久可以出來?

先不忙著用數學進行計算, 我們用程式統計平均天數:

首先, 進行一次實驗的天數是這樣的:

public static int escapedays() 

if (!light)

} else

}}

return days;

}

然後我們讓實驗進行一萬次。

public static void main(string args) 

system.out.println("平均需要的天數:" + days / times);

}

在我的電腦上輸出:

平均需要的天數:10428

差不多是  28 ~ 29 年時間。超過無期徒刑了, 國王還真會玩, 要是被囚犯們知道, 直接撞牆自殺了。

讓我們再用數學去計算一下:

首先,第一天出來的是「計數者」, 這是乙個必然事件, 沒啥好說的。

從第二天開始, 我們要完成以下過程 99 次

出來乙個新的囚犯, 然後等待「計數者」出來把燈開起來。

第一次出來新的囚犯的概率是: 99 / 100 --- 除去計數者, 其他任何囚犯出來都滿足要求

完成這一步的平均時間是 100 / 99  天

完成上面這個過程後,接著要求「計數者」出來,開燈。 這個概率是 1 / 100

完成這一步的平均時間是 100 天

第二次, 新囚犯出來的概率是 98 / 100

完成這一步的平均時間是 100 / 98

計數者出來的率還是 1 / 100

完成這一步的平均時間還是 100 天

第99次, 新囚犯出來的概率是 1 / 100 (只有乙個囚犯沒有出來了)

計數者出來的率還是 1 / 100

然後我們把時間加起來:

100 / 99 + 100 + 100 / 98 + 100 + ... 100 / 1 + 100

=  100 * 99 + 100 * (1 / 99 + 1 / 98 + 1 / 97 + ... + 1)

=  9900 + 100 * (1 + 1 / 2 + 1 / 3 + ... 1 / 99)

呼呼, 上面 1 + 1 / 2 + 1 / 3 + ... 1 / 99 這是乙個調和級數 大概等於 ln 99 + 1 ,

當然可以用程式 很容易求得 值為: 5.177

所以上述值為: 10417

和上面程式測試10000次的值吻合!

趣味演算法 國王和100個囚犯(據說是騰訊的面試題)

國王招來100個囚犯,對他們說 你們犯的是死罪,但我給你們一次求生的機會。15分鐘以後,你們將被關進乙個有100間隔離牢房的監獄裡,每人一間牢房,都與外界隔絕,什麼也聽不見看不到,連時間都沒法計算,無法獲得外界的任何資訊。這所監獄有乙個院子,每天只少隨機 注意是完全隨機 開啟一間牢房的門,讓乙個囚犯...

每天一道演算法題 國王和囚犯

上一題真心優化不出了的說。tat。話說還是最喜歡今天這樣的趣味智力題,雖然和演算法也沒什麼大關係噠,很適合消磨時間就是了 題目來了 國王招來100個囚犯,對他們說 你們犯的是死罪,但我給你們一次求生的機會。15分鐘以後,你們將被關進乙個有100間隔離牢房的監獄裡,每人一間牢房,都與外界隔絕,什麼也聽...

關於五個囚犯的智力題

題目 5個囚犯,分別按1 5號在裝有100顆綠豆的麻袋抓綠豆,規定每人至少抓一顆,而抓得最多和最少的人將被處死,而且,他們之間不能交流,但在抓的時候,可以摸出剩下的豆子數。問他們中誰的存活機率最大?1,他們都是很聰明的人 2,他們的原則是先求保命,再去多殺人 3,100顆不必都分完 4,若有重複的情...