雪莉兒的生日

**雪莉兒的生日**（英語：Cheryl's birthday）是一個數學問題的非正式名稱，是新加坡及亞洲中學數學奧林比克競賽的題目，在 2015 年 4 月 10 日由江堅文（Kenneth Kong）貼上 Facebook，之後在網路上爆紅，已獲得《紐約時報》、《衛報》、英國廣播公司（BBC）的報導，出題者也相當意外。

在題目中，名叫雪莉兒（Cheryl）的女生給了她剛認識的朋友艾伯特（Albert）和柏納（Bernard）一些有關她生日的資訊，讀者要根據這些資訊及她朋友的回覆判斷雪莉兒的生日。

## 起源

此問題是由新加坡《獅城有約》的電視主持人江堅文貼上 Facebook，之後有數千個回覆，包括一些有趣的回覆，例如認為雪莉兒根本不希望艾伯特和柏納知道她的生日，這一題引發了江堅文和他妻子的爭論，江堅文誤以為這是小學數學考試的一部份，且是針對 5 至 6 歲的兒童。江堅文後來更正這是 2015 新加坡及亞洲學校數學奧林匹克（SASMO）的題目，是針對 14 歲的學生設計。比賽在 2015 年 4 月 8 日舉行，有二萬八千名來自新加坡、泰國、越南、中國及英國的學生參加。SASMO 的主辦人員表示，此問題是針對參賽者中的前 40%，目的是為了「篩選出更好的學生」。SASMO 的執行董事告訴 BBC：「這樣的邏輯及分析思考可以用在生活上及工作中。」。

## 問題

此問題是在 25 個問題中的第 24 個，問題如下：

> 
> 艾伯特和柏納剛認識雪莉兒，想要知道雪莉兒的生日，雪莉兒列出了十個可能的日期： 
> 5 月 15 日、5 月 16 日、5 月 19 日、6 月 17 日 
> 6 月 18 日、7 月 14 日、7 月 16 日、8 月 14 日 
> 8 月 15 日、8 月 17 日
> 
> 接著雪莉兒分別告訴艾伯特及柏納她生日的月及日，以下是艾伯特和柏納的回應。
> 
> * 艾伯特：我不知道雪莉兒的生日是哪一天，但我知道柏納也不知道
> * 柏納：一開始我不知道雪莉兒的生日，但現在我知道了
> * 艾伯特：那我也知道雪莉兒的生日了
> 
> 請問雪莉兒的生日是那一天？
> 
> 

## 答案和解法

雪莉兒的生日是 7 月 16 日。
其解法是推理的方式，刪去不可能的日期，這也是 Alex Bellos 在英國的《衛報》解出此題的方式：

可能的生日用表格方式條列如下，將同月的放在同一列，同日的放在同一欄：

**（第一句話）艾伯特：我不知道雪莉兒的生日是哪一天，但我知道柏納也不知道。**

艾伯特知道的是月份，而每一個月都有一個以上的可能日期，不論艾伯特知道的月份是哪一個月，都不可能會知道雪莉兒的生日，第一句話的前半沒有提供有關生日的資訊。

柏納若要知道明確的生日日期，唯一的可能是生日日期的日在十個可能日期中只出現過一次，十個可能日期中，只有 18 日和 19 日各出現過一次，例如若柏納知道生日的日是 18 或是 19，就可以立刻推理得到生日是 6 月 18 日或 5 月 19 日。

但艾伯特說他知道柏納也不知道生日是哪一天，因此可以推測他知道的月份是 5 月或 6 月以外的月份（即 7 月或 8 月），因為若是 5 月或 6 月，柏納有可能知道生日是哪一天。

**（第二句話）柏納：一開始我不知道雪莉兒的生日，但現在我知道了**

根據第一句話柏納可以推測月份是 7 月或 8 月，而他已經知道生日是哪一天，表示他知道的日是在 7 月或 8 月中只出現過一次的日，因此可以排除 7 月及 8 月可能生日中都有出現的 14 日，柏納知道的日可能是 15 日、16 日或 17 日。

**（第三句話）艾伯特：那我也知道雪莉兒的生日了**

目前還有可能的生日是 7 月 16 日、8 月 15 日及 8 月 17 日，而艾伯特在聽完第二句話就可以知道生日是哪一天，表示他知道的月份在 7 月 16 日、8 月 15 日及 8 月 17 日中只出現一次。因此他知道的月份是 7 月，生日是 7 月 16 日。

答案是 7 月 16 日。

## 對題意的另一種理解

除了上述答案外，有些人認為 8 月 17 日也是一個可能的答案。但新加坡及亞洲學校數學奧林匹克認為此答案無效。

### 存在爭議之處

造成對題意存在不同理解的原因是題目的表述不夠準確，至少在避免歧義方面做得不夠完善。「但我**知道**柏納也不知道」這一句的英文原文「but I **know** that Bernard doesn't know too」就存在此問題。所以這是一個英文語言表達與理解的問題。一些人覺得此處的「**知道**柏納也不知道」是指「能很有把握地**猜測**柏納也不知道」，而另一些人則認為應該是指「已經由某種方式**準確地知曉**柏納確實不知道的**事實**」。其實**聯繫上下文就可以發現，出題人在文中此處所指（或暗示）的應該是前一種意思**，即艾伯特只是在進行「猜測」，而非已知曉部分事實。

一般來說，數理內容的敘述要儘量措辭準確，避免引起可能的歧義，但以此題來說，艾伯特是否事先知道有關柏納所知的部分事實，會干擾他自己第一步的思路，從而將這個推理過程最終引向完全不同的方向，如下所示。

### 另一種理解的推理過程（版本 1）

 **（第一句話）艾伯特：我不知道雪莉兒的生日是哪一天，但我知道柏納也不知道。**

艾伯特知道的是月份，而每一個月都有一個以上的可能日期，不論艾伯特知道的月份是哪一個月，都不可能會知道雪莉兒的生日，第一句話的前半沒有提供有關生日的資訊。

柏納若要知道明確的生日日期，唯一的可能是生日日期的日在十個可能日期中只出現過一次，十個可能日期中，只有 18 日和 19 日各出現過一次，例如若柏納知道生日的日是 18 或是 19，就可以立刻推理得到生日是 6 月 18 日或 5 月 19 日。因此，首先排除 6 月 18 日和 5 月 19 日這兩天。

注意到，這時 6 月只剩下 17 日這一天。如果艾伯特知道的月份是 6 月，那麼這時他已經知道了雪莉兒的生日。但艾伯特並不知道，所以又排除 6 月 17 日這一天。

 **（第二句話）柏納：一開始我不知道雪莉兒的生日，但現在我知道了。**

根據第一句，剩餘的日期中，14 日、15 日和 16 日分別出現在兩個月中，只有 17 日只出現在 8 月。現在柏納知道了雪莉兒的生日，這表明柏納知道的日期是 17 日，所以雪莉兒的生日是 8 月 17 日。

 **（第三句話）艾伯特：那我也知道雪莉兒的生日了。**

艾伯特也知道只有 17 日是唯一的，因此在聽到第二句話之後，艾伯特也知道了雪莉兒的生日是 8 月 17 日。

答案是 8 月 17 日。

### 另一種理解的推理過程（版本 2）

下面假設「艾伯特在說第 1 句話時已經由某種方式**準確地知曉**柏納確實不知道的**事實**」，並指出此情形下的解法以及與前一種情形的步驟差異。

如果艾伯特在第 1 次講話前事先被人明確告知柏納根據自己所知的日期推不出生日，則第 1 步可排除 18 日與 19 日。但是此情形下柏納得知的日期是仍有可能屬於 5 月或 6 月的，只不過不可能是在 18 日或 19 日。（與在第 1 步就可排除掉 2 行的上 1 種情況相比，區別在於在此情形的第 1 步只能排除 2 個可能選項。換句話說，這一種情形下在第 1 步排除的選項要少很多。）而在排除 18 日與 19 日後，在剩下的選項中，僅有 6 月 17 日可由月份數唯一確定。但此時艾伯特作出了「我還不知道」的判斷。說明生日也不可能在 6 月 17 日。

足夠聰明的柏納也是這麼想的。而且在聽到艾伯特還推不出生日時，表示自己已經推出了答案。說明在上一步所剩的各個選項中，已經能由日期唯一地確定出生日，但尚不能僅月份確定。也就是說，在剩下來的選項中，生日的月份數一定出現了不只一次，但日期數一定只出現了一次。唯一符合這條件的選項只有 8 月 17 日。（14 日、15 日、16 日都在不同月份中出現了 2 次，僅 17 日出現了 1 次（出現在 8 月）；另外，8 月此時也確實有 3 個不同的候選日期。故生日應為 8 月 17 日。）

### 2 種情形的解法步驟比較

對比 **7 月 16 日**和 **8 月 17 日**兩種答案的推理過程，可以知道：

* 根據**第一句話**首先排除的是 5 月和 6 月這兩個月份，而不僅僅是 5 月 19 日和 6 月 18 日這兩天。
* **8 月 17 日**的推理過程隱含了對**第一句話**的錯誤理解，即理解成了「因為艾伯特知道柏納不知道雪莉兒的生日是哪一天，所以艾伯特也不知道」。6 月 17 日就因為這種理解被排除的。而第一句話的正確理解是「艾伯特不知道雪莉兒的生日是哪一天，**並且**柏納也不知道」。
* 由於對**第一句話**內在邏輯的不同理解，出現了版本 1；又由於對 **「知道（know）」** 一詞的不同理解，出現了版本 2。

以下各表中以「×」號表示因被排除而被划去的日期。為美觀起見，實際操作時，各表還可以簡寫為數陣的形式。

### 由此引申出的矛盾

通過以上推理，可以總結出：如果艾伯特是「猜測」到柏納不知道雪莉兒的生日，那麼不論日期為 15 日、16 日還是 17 日，柏納在聽到第一句話後都能「猜測」出雪莉兒的生日；而如果艾伯特「已經由某種方式準確地知曉柏納確實不知道的事實」，那麼只有當日期為 17 日時，柏納才能在聽到第一句話之後知道雪莉兒的生日。

於是有了這樣一種可能，先假定以下三點：

* 艾伯特確實「已經由某種方式準確地知曉柏納確實不知道的事實」，因此說了第一句話；
* 柏納卻把第一句話理解成了艾伯特「能很有把握地猜測柏納也不知道」；
* 雪莉兒的生日是 8 月 15 日，告訴了艾伯特 8 月，又告訴了柏納 15 日。

然後，柏納聽到第一句話之後「猜測」出雪莉兒的生日是 8 月 15 日，因此說了第二句話。艾伯特按自己的理解說了第三句話，但其實他以為雪莉兒的生日是 8 月 17 日。這便是矛盾之處。

實際上，艾伯特在知道 8 月的情況下，即使不存在「某種方式」，他也可以知道柏納也不知道。然而，由於「某種方式」的存在，使得艾伯特忽略了這一點。另一方面，柏納或許沒有想到「某種方式」的存在，因而與艾伯特產生誤會。

最後，柏納甚至可能對艾伯特說第四句話：「你怎麼知道是 15 日還是 17 日的？」

## 推廣

本題可抽象和推廣為一類在層層遞進的限制條件下，從高維向量空間的有限點集中篩選特定點的問題。為保證問題可解且有唯一的解，作為猜測範圍的有限點集必須是精心選取的。

這裡以 4 維情況為例作一個說明。X 先生從 4 維歐幾里德空間 $\mathbb {R} ^{4}$ 中精心挑選出一個點集 $A$ 作為參考範圍（要保證謎題可解），再從 $A$ 中挑選出一個特定的點 $x$ 作為猜測對象。X 先生取 $\mathbb {R} ^{4}$ 的標準基作為參考基底，從而 $A$ 中各點都有了唯一的坐標數值。設點 $x$ 在標準基下的坐標表示為 $x=(x_{1},x_{2},x_{3},x_{4})$ 。X 先生將 $x_{1}$ 寫在紙片上遞給了甲，將 $x_{2}$ 寫在紙片上遞給了乙，將 $x_{3}$ 寫在紙片上遞給了丙，將 $x_{4}$ 寫在紙片上遞給了丁。然後由 4 人輪流或自由發言，但只能談及自己是否能準確推知 $x$ 的所有坐標值，或者是否能有把握地預測另一人的推斷結果。這裡還需要假定這 4 個參與者都足夠聰明，且都在積極思考答案。當所有人都確信自己已可推出答案時（即此問題可解時），再由讀者來推斷 $x$ 的坐標。

上例所示的 4 維點集篩選問題可自然地推廣至 n 維。當 n=2 時，此類問題可用列出數表的方法（先列出一個包含所有參考選項的 2 維數表，再根據題設條件一步一步划去不符合題意的選項）求解。n≥3 時，考察集合已難以用簡潔的數表描述，但可視作 n 維數組或 n 階張量（考察集合是點集，點集的坐標當然符合張量變換規律，所以可視作張量），並易於利用計算機編程求解。以 2 維點集的篩選為例，其算法大體上就是先根據說話人的描述對象（是自己的猜測還是對別人的猜測）所屬的組別確定是篩選行向量還是列向量，並根據說話人的判斷情況選擇是划去選出的子向量組還是划去未選中的向量組。然後根據說話人的發言順序逐步循環篩選下去。因為對話數量是有限的，所以只要題目所設條件信息充分，在有限步驟內一定可以完成篩選循環。求解答案的算法實際上也是判斷可解性的算法，如果到最後一個條件用完後還算不出答案，那麼原題一定無解。

除參考集合可以推廣至高維向量空間外，求解的對象也可由一個點推廣為多個點。即求解 $A$ 的某個元素變為求解 $A$ 的某個子集。當求解的點數增多時，與直接靠腦力思考的方法相比，代數方法仍具有判斷速度快和可程序化處理的優勢。

## 另見

* 和與積的問題

## 參考資料與腳註