百人戴帽子問題

2021-06-08 13:10:38 字數 3283 閱讀 2604

題目:有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有多年開發經驗,他們大部分也不懂...