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

2021-05-23 07:19:16 字數 925 閱讀 7661

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

這所監獄有乙個院子,每天只少隨機(注意是完全隨機)開啟一間牢房的門,讓乙個囚犯到院子裡來放風。院子裡有一盞燈,放風的囚犯可以控制它的開關,將它開啟或是關閉。除囚犯之外,其他人都不會去碰開關。這盞燈會永遠有充足的能源**,燈泡和電路不會出故障。 

除了開關這盞燈,放風的囚犯放風時留下的任何其它痕跡都會在夜晚被清除乾淨(包括在燈上作的任何記號)。牢房是完全封閉的,院子裡的燈光在牢房裡看不到。只有放風到院子裡的人才能看到。 

好了現在我向你們提出乙個要求,只要你們做到了,就可以全部獲得釋放: 

給你們15分鐘商量你們的方案。15分鐘以後,你們將被關進我剛才說的那個監獄,永遠無法再交流,被關若干天後,你們中間如果任何乙個人能夠向我證明你們每個人都至少放風了一次,我就把你們放了,不然永遠別想再出來。 

好吧!這樣吧,如果你們有誰現在可以告訴我這個方法,也就是能夠證明你們每人至少放風一次的方法,我馬上放掉你們! 

其中乙個囚犯想了幾分鐘,回答了這個問題,國王聽後,如自己所說的把他們全部給放了。請問那個囚犯是用什麼方法證明的?

分析一下,這裡面參與求解的東西無非就是監獄、燈、囚犯(計數員)。

監獄:沒有什麼動作需要做的。

燈:有乙個狀態標識, 提供開燈和關燈的方法。

囚犯:有乙個是否開過燈的標識,並帶有乙個開燈的方法 

計數員:繼承囚犯,且擁有關燈的方法。 

大致的解題思路(建議思考後再看): 

**囚犯們指定一人為計數人(a),a以外的囚犯每次出來放風時,如果看到燈是關閉的,則將燈開啟,但如果已經開過一次燈,則不理會,當a出來放風時,如果燈是開著的,則將燈關掉,關一次則表示有乙個人出來了一次,計數至100,完成。

貪心演算法 國王遊戲

孫悟空給花果山的小猴子們分桃子。首先,他讓每只小猴在左 右手上面分別寫下乙個整數,悟空自己也在左 右手上各寫乙個整數。然後,讓這 n 隻小猴排成一排,悟空站在隊伍的最前面。排好隊後,所有的小猴都會獲得一些桃子,每只小猴獲得的桃子數分別是 排在該小猴前面的所有猴子的左手上的數的乘積除以他自己右手上的數...

關於國王和100個囚犯

今天在論壇看到一題目 國王和100個囚犯 大概在去年,朋友問過過我這個問題。方案比較簡單 首先,第一天出來的人,擔當 計數者 它把燈開起來 原來開著就不必動了 然後每天出來乙個囚犯。如果他不是 計數者 並且沒有關過燈,並且燈開著,那麼就把燈關了。如果他是 計數者 如果燈關了,就把他開起來 計數 1 ...

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

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