1. 程式人生 > >[CareerCup] 6.4 Blue Eyes People on Island 島上的藍眼人

[CareerCup] 6.4 Blue Eyes People on Island 島上的藍眼人

6.4 A bunch of people are living on an island, when a visitor comes with a strange order: all blue-eyed people must leave the island as soon as possible. There will be a flight out at 8:00pm every evening. Each person can see everyone else's eye color, but they do not know their own (nor is anyone allowed to tell them). Additionally, they do not know how many people have blue eyes, although they do know that at least one person does. How many days will it take the blue-eyed people to leave?

這道題假定一個島上有很多人,其中有些人是藍眼睛的,設定是藍眼睛的人要儘可能早的離開島,每天晚上八點都有飛機離開島。每個人可以看見別人眼睛的顏色,但是不知道自己眼睛的顏色,而且也不能被告知,問需要多少天可以讓藍眼睛人都離開。

這道題讓我想起來了很小時候聽過的一道智力題,是小猴帶帽的問題,說是有四個帽子,三個藍色一個紅色的,有三隻小猴一人戴其中一個帽子,每隻小猴不知道自己戴的什麼顏色的帽子,但能看到其他小猴戴的帽子的顏色。其中一隻小猴看到其他兩隻小猴都是藍色的帽子,它就在考慮自己的到底是紅色的還是藍色的,當它發現大家都陷入了沉思時,它馬上說自己戴的是藍色的,請問問什麼?我小時候想了很久都不明白,其實很簡單,如果這小猴戴的是紅色的帽子,那麼其他小猴馬上就知道自己戴的是藍色的,因為只有一頂紅色的帽子,既然其他小猴也不知道,那麼自己戴的肯定是藍色的。

這道題的思路和上面的小猴戴帽有些類似,我們先從簡單的開始分析,假設島上有c個人是藍眼睛:

1. c = 1, 這種情況最簡單,應為那個人看到周圍都沒有藍眼睛,由於題目設定了一定有藍眼睛,那麼自己肯定是,所以當晚就可以坐飛機離開。

2. c = 2,這時候藍眼睛的人可以看到周圍有一個人是藍眼睛,那麼他可以推斷島上只有1個或2個藍眼睛人,如果那人第一晚,沒走,他就可以推斷出自己也是藍眼睛,於是兩個藍眼睛的人第二晚同時走了。

3. c = 3,和上面類似,藍眼睛的人可以看到周圍有兩個藍眼睛,則推斷島上有2個或3個藍眼睛人,如果只有兩個藍眼睛,那麼他兩第二天晚上就會同時離開,如果第二晚沒有離開,則說明自己也是藍眼睛,則三人第三晚上同時離開。

4. c = c, 推廣到c個人,根據如上分析,c個藍眼睛的人會等到第c天晚上,所有c個藍眼睛的人同時離開。