這是一道經典的邏輯推理面試題,常被稱為「老師的生日」或「Cheryl's Birthday」變體。雖然標題帶有 Java,但實際上純粹考驗邏輯思維,與程式語言無關。題目透過兩位學生的對話,逐步縮小可能日期範圍,最終推導出唯一答案。以下是詳細推理過程。
老師的生日是 M 月 N 日。學生甲知道月份 M,學生乙知道日期 N。公開的候選日期共 10 個:
對話內容:
請推導老師的生日是哪一天?
甲知道月份,但無法直接確定生日,表示該月份下有多個可能日期。關鍵在於「你一定不知道」——甲確信乙(知道日期)也無法確定月份。這意味著甲所知道的月份下,沒有任何一個日期是全列表中唯一的。
檢查各月份的日期:
若甲知道是 6 月,乙若拿到 7 就能直接推斷;同理 9 月的 1、12 月的 2 也會讓乙直接知道。因此甲的月份不可能是 6、9、12 月,只能是 3 月。剩餘候選日期:3 月 4 日、3 月 8 日、3 月 10 日。
乙聽完甲的話,推斷出月份是 3 月。乙說「現在我知道了」,表示乙手中的日期在剩餘的三個日期中唯一對應 3 月。
剩餘日期對應關係:
若乙拿到 10 日,在聽完甲的話前會對應 3 月和 9 月兩種可能;聽完後雖然 9 月被排除,但乙無法區分是否為 3 月 10 日(因為 10 日在原始列表中出現兩次)。但乙明確說「我知道了」,說明乙的日期不是 10 日。因此乙的日期是 4 或 8,對應 3 月 4 日或 3 月 8 日。
甲知道月份是 3 月,聽完乙的話後,若乙的日期是 4 或 8,甲仍面臨兩個選擇(3 月 4 日、3 月 8 日),無法確定。但甲說「我也知道了」,這似乎矛盾?
重新審視:原始列表中 10 日出現於 3 月和 9 月。若乙拿到 10 日,在第一輪後無法確定(因為 9 月已被排除,但乙不知道甲是否排除 9 月?)。實際上,標準解法中,乙的「現在我知道了」隱含乙的日期在第一輪剩餘集合中唯一。第一輪剩餘集合只有 3 月的三個日期,其中 4、8、10 皆屬 3 月,乙無法區分。這說明題目條件或推理有誤?
經驗證,此題為經典「Cheryl's Birthday」變體,正確候選日期應包含 5 月 15、16、19 日 等,使得 18、19 為唯一日期。本題給定的日期列表中,7 日(6 月)、1 日(9 月)、2 日(12 月)為唯一日期。第一輪排除 6、9、12 月後,剩餘 3 月三個日期。乙若持有 4、8、10 皆無法唯一確定(均屬 3 月),故乙不會說「我知道了」。
結論:題目提供的日期列表可能有誤,或為簡化版本。若按嚴格邏輯,無解。標準版本答案為 7 月 16 日(原版)或類似日期。
此類題目核心在於「共同知識」與「遞歸推理」:每一句話都公開了說話者的知識狀態,雙方據此更新認知。解題關鍵是建立「知識狀態表」,逐輪排除不可能的選項。