題目:有100個人商量做乙個遊戲,在遊戲開始之前他們商定乙個策略,然後每人戴一頂帽子,帽子上是1~100的隨機數,遊戲開始後每人只能看到其他人頭上的帽子的數字。這時要求所有人同時說出乙個數字來猜自己頭上的帽子,問是否存在乙個策略(策略比賽開始之前商定)使得:至少有乙個人說出的是自己頭上的數字?
提示一:
當題目簡化成只有2個人的時候,可以知道頭上帽子的數字不是0就是1。
可以將所有的情況窮舉出來
帽子一 帽子二
0 0
0 1
1 0
1 1
上述的情況可以劃分成兩類:
類別1:
0 0
1 1
類別2:
0 1
1 0
上述兩個類別中,類別1的兩人只要商定策略 "我們都報對方頭上的數字" 就都可以答對,相反,如果商定策略 "我們都報對方頭上相反的數字" 那就全部打錯。
類別2中的兩人只要商定策略 "我們都報對方頭上相反的數字" 就可以全部答對, 反之,則全部答錯。
根據類別1和類別2可以中和一下策略: "你報我頭上的數字, 我報你頭上相反的數字"。則可以得到如下結果:
帽子一 帽子二 戴帽子一的人報的數字 戴帽子二的人報的數字
0 0 0 1
0 1 1 1
1 0 0 0
1 1 1 0
這種商定策略可以保證至少有乙個人且僅有乙個人答對數字
解答一:
從100個人中隨機抽乙個人(a)出來,叫他(a)把相同數字的人圍成圈站一起。ⅰ有圈的情況下,讓他(a)對大家說:「報出各自圈子裡看到的數字,沒站成圈的隨便報,a自己也隨便報。」ⅱ沒圈的情況下,a進去,讓a換個人(b)出來做指揮,讓他(b)把相同數字的人圍成圈站一起。 ①若無圈,叫a讓b對大家說:「報出自己沒看到的數字。」 ②若有圈,叫a讓b對大家說:「報出各自圈子裡看到的數字,沒站成圈的隨便報,b自己隨便報。」請大家看看這樣接合乎邏輯不,有沒有犯規。
這種方法如果存在圈那就一定有人答對,因為圈內的人數字都相同。如果不存在圈,則所有數字不重複,那除去自己看到的數字就只剩自己頭上帽子的數字了。但是,這種方法本身需要有個人(a)出來管制策略,從創新的角度來說,是個相當簡單便捷的方法,但是如果規則硬性規定不能有個人出來管制策略呢?
解答二:
回歸到原來的提示一,在提示一的基礎上就沒有辦法將問題擴充套件回原來的100人,甚至是1000人以及1000個數字的情況嘛?
我們來尋找下類別1和類別2的共同規律,可以發現類別2兩個帽子的總數相加的總數是固定值1,類別1的帽子的總數也同樣是固定值,分別是0和2。
既然帽子的總數是固定值,那我們可以不可以通過猜總數值來猜自己頭上的數字呢?但是0、1兩個數字的總數值可以是0、1、2三種結果,而人數卻只有2個,只能猜測兩種結果。
其實這裡仔細考慮下可以發現實際上0、1連個總數的值並沒有3種結果,當有乙個數字的值是1時,那麼結果只可能是1、2兩種。為了方便運算起見,我們將結果值對人數取餘,則0、1、2取餘的結果是0、1兩個結果。
那麼只要一開始的時候規定好自己將要猜的結果餘數值,就可以將所有可能的結果情況列舉一遍,這樣就其中乙個人就可以將唯一答案給說中,如此就確保有且僅有乙個人猜對自己頭上的數字。
首先以2個人為例子 a猜結果餘數為0的值, b猜結果餘數為1的值
a b a的計算過程 b的計算過程 a的結果 b的結果
0 0 (a + 0) % 2 = 0 (b + 0) % 2 = 1 0 1
0 1 (a + 1) % 2 = 0 (b + 0) % 2 = 1 1 1
1 0 (a + 0) % 2 = 0 (b + 1) % 2 = 1 0 0
1 1 (a + 1) % 2 = 0 (b + 1) % 2 = 1 1 0
通過上述例子,我們可以發現和提示一所產生的答案完全一致,但是利用該方法可以引伸到更多的人數設定是100人、1000人以及更多。
我們再以 3個人為例子進行一次校驗, a商定餘數結果是0、b是1、c是2
a b c a的計算過程 b的計算過程 b的計算過程 a的結果 b的結果 c的結果
0 1 0 (a + 1) % 3 = 0 (b + 0) % 3 = 1 (c + 1) % 3 = 2 1 1 1
0 1 2 (a + 3) % 3 = 0 (b + 2) % 3 = 1 (c + 1) % 3 = 2 0 2 1
2 2 1 (a + 3) % 3 = 0 (b + 3) % 3 = 1 (c + 4) % 3 = 2 0 1 1
...
因為abc總共有3的3次方27種情況,就不一一枚舉了。
即一開始商定策略:
(自己要報出來的數字 + 看的所有數字的總和) % 總人數 = 自己預定義的結果餘數編號
解答補充:
上述解答是經同學指導得到,但是並不一定是唯一解,希望大家能夠給出更加簡便或者特殊的解答方法,共同交流。解答補充希望有大牛幫忙指導!
ps:部落格遷移
乙個有趣的智商考察題 戴帽子問題
今天看見乙個智商考察題,拿出來分享分享。題目如下 此處引用他人一段話,給大家乙個解題思路先。個人解題思路如下 第一種情況 2白1黑 短時間內,戴黑帽子的人肯定會回答 第二種情況 3黑 大家都無法確定 所以都沉默 第三種情況 2黑1白 大家都無法確定 所以都沉默 分析第二三種情況,發現都出現了 大家都...
百人拉百燈問題
百人拉百燈問題 有100個房間,每個房間裡有一盞燈,這些燈都是滅的,另外還有100個人 第乙個人來到房間裡 如果房間編號能整除1,則拉一下燈 第二個人來到房間裡 如果房間編號能整除2,則拉一下燈 問 當100個人都拉完燈之後,哪些燈是亮的?public class qst 將開著的燈輸出 on ro...
繼續 管理百人研發團隊的煩惱(下)
上次在我的部落格上發布這片文章,瀏覽率還是很高,所以這次5月份的程式設計師雜誌正好有出來,今天抽時間把下發布出來 感覺看了還是有點用的 管理百人研發團隊的煩惱 下 搞好高效率的 大鍋飯 老s有個夢想,找乙個人,每天下午四點能為公司所有開發人員的工位上送上一瓶酸奶。老s有多年開發經驗,他們大部分也不懂...