概念 ①

真假話推理

「三人中只有一人說了實話」——這句話不是提示,是整題唯一的計算工具。學會把它變成一張檢查表,這一類題目幾乎都可以在一分鐘內解完。

🎯 這一頁學完,你會……

先講清楚:什麼叫「真」、什麼叫「假」

在邏輯題裡,一句話只有兩種可能:(符合事實)或(不符合事實)。沒有「有點真」,也沒有「他只是記錯」。

乙說:「不是我做的。」

同一句話,在不同的假設下真假不同。所以推理題一定要先假設,再判斷

⚠️ 常見誤解

「說謊的人是壞人」「說謊的人一定是犯人」——都不對。在邏輯題裡,說謊只表示他那句話是假的。犯人有可能誠實地承認,好人也有可能為了保護同學說假話。只照條件算,不要加戲。

方法一:假設法(最穩,一定會做)

  1. 列出所有可能的「真相」
    犯人只會是甲、乙、丙其中一人 → 只有 3 種情況。
  2. 在每一種情況下,逐句判斷真假
    假設是甲做的,那「是乙做的」就是假的、「不是我做的」(乙說)就是真的……
  3. 數一數有幾句真話
    和題目給的數字(只有一人說實話)比對。
  4. 不合的刪掉,剩下的就是答案
    正常的題目只會剩一個。剩兩個 → 代表條件不足(這也可能是選項之一)。

🔎 互動:自己試試三種假設

點一個假設,看看三句話分別變成真還是假,再數數看有幾句真話。

測驗第 2 題:完整解析

第 2 題 106 年數學競賽初賽

教室的玻璃被打破了,一定是甲、乙、丙三人其中一人所為。

:「是乙做的。」 :「不是我做的。」 :「也不是我做的。」

三人中只有一人說了實話,玻璃是誰打破的?

假設甲:是乙做的乙:不是我做的丙:不是我做的真話幾句合不合
甲打破的2❌ 太多
乙打破的2❌ 太多
丙打破的1✅ 剛好
🔑 答案:(C) 丙

只有「丙打破的」這個假設,會讓真話剛好是 1 句(只有乙說了實話)。其他兩個假設都會出現 2 句真話,和題目衝突,所以被刪掉。

注意最後一欄:三種假設只有一種活下來,所以答案唯一,(D)「條件不足」不成立。

方法二:矛盾對(快,但要看得出來)

如果兩句話不可能同時為真,也不可能同時為假,就叫一組矛盾對。矛盾對一定是一真一假

甲:「是乙做的。」  乙:「不是我做的。」

這兩句講的是同一件事(乙是不是犯人),而且說法完全相反 一定一真一假。

  1. 找出矛盾對
    甲和乙這兩句,必有一真一假。
  2. 把真話的額度用掉
    題目說只有一人說實話,而這唯一的一句真話已經在甲、乙之間了。
  3. 推出其他人一定說謊
    所以丙說的是假話。丙說「不是我做的」是假的 → 就是丙做的
💡 什麼時候用哪一個?

題目只有三、四句話 → 假設法就夠快,而且不會出錯。句子很多(六、七個人)→ 先找矛盾對,把真話/假話的額度用掉,剩下的人身分就自動確定了。考試時兩個都會,比只會一個安心。

小陷阱:一句話的「否定」

說謊=那句話是假的。所以你要會寫否定。很多人會把否定寫成「相反到底」,這是最常見的失分點。

原句✅ 正確的否定❌ 寫錯的版本
不是我做的就是我做的
全班及格了至少有一個人沒及格全班都沒及格
至少有一個人遲到沒有人遲到只有一個人遲到
他都有去我沒去他沒去(至少一個沒去)我和他都沒去
一定會來有可能不會來他一定不會來
🔑 口訣

「都」的相反是「至少一個不」;「至少一個」的相反是「一個都沒有」。否定只要剛好推翻原句就好,不用推到最極端。

換一個條件,答案就會變

把第 2 題的三句話完全不動,只把條件改成「只有一人說謊」,再算一次:

假設真話幾句說謊幾人只有一人說謊?
甲打破的21✅ 合
乙打破的21✅ 合
丙打破的12❌ 不合

這時候有兩個假設活下來,答案就不唯一了——這種情況的正解就是「條件不足,無法有效判斷」。所以選項 (D) 不是來亂的,它真的有可能是答案,只是這一題剛好不是。

✍️ 練習題

選擇題

A. 選擇題

每題都請先在紙上列表:三種假設 × 每句話的真假。不要用猜的。

冰箱裡的蛋糕被吃掉了,一定是甲、乙、丙其中一人吃的。甲:「是丙吃的。」乙:「我沒吃。」丙:「甲說謊。」已知只有一人說真話,是誰吃的?

假設是吃:甲假、乙真、丙真 → 2 句真話 ❌

假設是吃:甲假、乙假、丙真 → 1 句真話 ✅

假設是吃:甲真、乙真、丙假 → 2 句真話 ❌

只有「乙吃的」活下來,答案是。(丙說「甲說謊」,只要甲的話是假的,丙就說了真話。)

甲:「是乙做的。」乙:「不是我做的。」丙:「不是我做的。」哪兩句話一定是一真一假(矛盾對)?

甲說「乙是犯人」、乙說「乙不是犯人」,講的是同一件事的正反面,不可能同時真、也不可能同時假,所以是矛盾對。乙和丙講的是不同的人,可以同時為真(犯人是甲的時候)。

「全班同學都及格了」這句話是假的。可以確定什麼?

「都及格」只要破一個洞就變成假的,所以否定是「至少有一個人沒及格」。可能是 1 個、也可能是全部,但我們只能確定「至少一個」。

同樣是甲:「是乙做的。」乙:「不是我做的。」丙:「不是我做的。」但條件改成「只有一人說謊」,犯人是誰?

是甲做的 → 真話 2 句、說謊 1 人 ✅;是乙做的 → 真話 2 句、說謊 1 人 ✅;是丙做的 → 真話 1 句、說謊 2 人 ❌。

有兩個假設都活下來,所以無法判斷。同樣三句話,換一個條件答案就不同——這就是為什麼一定要老實列表。

已知三人中只有一人說真話,而且甲、乙兩人的話是一組矛盾對。可以立刻確定什麼?

矛盾對一定一真一假,所以唯一的那句真話已經被甲、乙用掉了。剩下的丙只能說謊。至於甲和乙誰真誰假,還要再看別的條件。

四個人中有一人打破窗戶。甲:「是乙做的。」乙:「是丙做的。」丙:「甲說的是真的。」丁:「不是我做的。」已知只有一人說真話,是誰做的?

先看丙:丙說「甲說的是真的」,所以丙和甲永遠同真同假

:甲假、乙假、丙假(跟著甲)、丁真 → 1 句真話 ✅
:甲真、乙假、丙真、丁真 → 3 ❌
:甲假、乙真、丙假、丁真 → 2 ❌
:甲假、乙假、丙假、丁假 → 0 ❌

只有「甲做的」活下來,答案是。人一多,先找出「同真同假」或「一真一假」的兩句話,算起來會快很多。

島上只有兩種人:誠實者永遠說真話,說謊者永遠說假話。A 對你說:「我們兩個(A 和 B)都是說謊者。」A 和 B 分別是什麼人?

先假設 A 是誠實者:那他的話是真的 → 他自己是說謊者 → 自相矛盾 ❌。所以 A 是說謊者

A 是說謊者 → 他的話是假的 → 「兩人都是說謊者」不成立 → 至少一個不是。既然 A 是說謊者,那個不是的就只能是 B,所以 B 是誠實者。

同一座島上,C 說:「我是說謊者。」C 是什麼人?

如果 C 是誠實者 → 他說的是真的 → 他是說謊者,矛盾。
如果 C 是說謊者 → 他說的是假的 → 他不是說謊者,還是矛盾。

兩種都矛盾,所以這句話在這座島上說不出口。這是有名的「說謊者悖論」。

甲:「是乙做的。」乙:「是丙做的。」丙:「不是我做的。」已知恰好兩人說真話,是誰做的?

:假、假、真 → 1 ❌ 是:真、假、真 → 2 ✅ 是:假、真、假 → 1 ❌

只有「乙做的」符合,答案是。乙自己說了假話(想推給丙),但真相就是乙。

甲、乙、丙三人中恰有兩人是說謊者。甲說:「乙是說謊者。」乙說:「丙是說謊者。」丙說:「甲和乙都是說謊者。」誰說的是真話?

三人中只有一個誠實者,分三種情況檢查:

只有誠實 → 甲的話真,乙是說謊者 ✓;但乙說「丙是說謊者」,此時丙的確是說謊者,乙就說了真話,和「乙是說謊者」衝突 ❌。

只有誠實 → 甲說「乙是說謊者」為假 ✓(甲是說謊者);乙說「丙是說謊者」為真 ✓;丙說「甲和乙都是說謊者」,乙其實誠實,所以這句是假的 ✓(丙是說謊者)。全部相符 ✅

只有誠實 → 丙的話真代表甲、乙都說謊;但甲說「乙是說謊者」剛好為真,矛盾 ❌。

答案是。這種題的檢查重點是:每個人的身分,要和他那句話的真假完全一致

為什麼「只有一人說實話」這個條件特別好用?

它同時說了「至少一人」和「至多一人」,把真話數量釘死成 1。有了這個數字,每個假設都能算出真話幾句,再比對就好。它本身不指名任何人。

用假設法算完一題之後,發現三個假設都符合條件。這代表什麼?

推理題要的是唯一解。全部活下來 → 條件不足;全部出局 → 一定有一句話翻譯錯了,回頭檢查。這兩種檢查,比算得快更重要。

B. 動手寫

把第 2 題的表格自己寫一次

不要看上面的解析,自己寫出三種假設下每句話的真假,以及真話的數量。

甲做的 → 甲假、乙真、丙真=2 句真話 ❌

乙做的 → 甲真、乙假、丙真=2 句真話 ❌

丙做的 → 甲假、乙真、丙假=1 句真話 ✅

答案:丙。

找出矛盾對

四個人說:甲「是丁做的」、乙「不是我做的」、丙「甲說的是真的」、丁「不是我做的」。
哪兩句是矛盾對?哪兩句一定同真同假

矛盾對:甲「是丁做的」和丁「不是我做的」——講同一件事的正反面,必定一真一假。

同真同假:甲和丙——丙說「甲說的是真的」,所以丙的真假永遠跟著甲跑。

找到這兩種關係,題目通常就剩下一兩種情況要檢查了。

自己出一題

設計一題「三人中只有一人說實話」的題目,答案是。寫完自己用表格檢查一次,確定答案唯一。

例:甲「不是我做的」、乙「是丙做的」、丙「不是我做的」,只有一人說實話。

甲做的 → 假、假、真=1 ✅  乙做的 → 真、假、真=2 ❌  丙做的 → 真、真、假=2 ❌

只有「甲做的」活下來,答案唯一。

出題其實比解題難:你要同時保證有解(至少一種情況符合)和唯一(只有一種情況符合)。第一次寫常常會出現兩個答案,改一句話再算一次就好——這個過程本身就是最好的練習。