乙個教授邏輯學的教授,有三個學生,而且三個學生均非常聰明! 一天教授給他們出了乙個題,教授在每個人腦門上貼了一張紙條並告訴他們,每個人的紙條上都寫了乙個正整數,且某兩個數的和等於第三個!(每個人可以看見另兩個數,但看不見自己的) 教授問第乙個學生:你能猜出自己的數嗎?回答:不能 問第二個,不能 第三個,不能 再問第乙個,不能 第二個,不能 第三個:我猜出來了,是144! 教授很滿意的笑了。 請問您能猜出另外兩個人的數嗎? 請問: 第三個人是怎麼猜出來的?你是怎麼猜出另外兩個數的?
為什麼之前發了一遍給我吞了?????重發一遍
搬運乙份好的解法:
鏈結(非原文出處):
excited!!!
這真是乙個十分有趣,但細究卻十分複雜的問題。
先說本題的正解,一共5組:
(36,108)(108,36)(32,112)(64,80)(54,90)
很不可思議吧?
先說為什麼對,再說怎麼解。
基礎:為什麼這些是正解?
假設 3 個人分別是 a,b,c;
以(36,108)為例;
大前提: 在第一輪中,所有人都知道了,自己的答案只可能是兩個數之一;
所需 條件 r:排除掉其中乙個(就一定能猜到另乙個);
在第二輪中,c 運用了
兩層邏輯:
前提:自己是 72 或 144;
假設 1:自己是 72;
推論 1:b 應該是 36 或 108; ——
假設 2:假如 b 是 36;
————
推論 2:c 應該能判斷出自己是 72;
————
已知 1:c 第一輪沒有猜出; ——
故假設2 不成立!
—— 推論 3:b 應該 在第二輪 排除 36 (條件 r 達成); ——
已知 2:b 沒有在第二輪猜出;
故假設1 不成立!
條件r 達成,c 成功猜出!
(36,108) 是乙個比較簡單的情況,僅僅用了兩層邏輯。但是其他解其實就沒有那麼顯然了,可能是三層、四層甚至五層邏輯……(邏輯學教授恐怕也會被繞暈吧?)
所以請看第二部分:如何得到正解。
********************
高階:如何得到正解?
但是我們之前並不知道答案,那如何推得答案呢?
我的方法是,
從邏輯上,一層層死推,不要放過任何乙個線索;
本題一共 5 個條件,即 前 5 次大家都不知道正解;
還有乙個隱藏條件(即真正的大前提):0 不是正整數;
總計6個條件;
接下來,就是放大招的時刻了!
說明:
下面,是每乙個輪的每乙個回合中,某方恰能猜出來的所有必要條件;
在下面的推導過程中,所有小括號()內數字比例都是 a:b:c;
中括號【】內是指該輪猜出運用的條件;
: 0不是正整數(所以若看到另外兩個數字相同,則自己必然是它們的和);
第 1 輪:
【1.1】a 猜出
b 和 c 相同 (2:1:1);
【1.2】b 猜出
a 和 c 相同(1:2:1)
a 是 c 的 2 倍(2:3:1)【1.1】;
(理解:b 看到 a:c=2:1,但是 a 沒有猜出,所以 b 不是1,而是 3,這就是排除錯誤選項的方法,而這個邏輯是後面所有推論的核心邏輯:細究前面的人沒有猜出的原因)
【1.3】c 猜出
a 和 b 相同 (1:1:2)
a 是 b 的 2 倍 (2:1:3) 【1.1】
b 是 a 的 2 倍 (1:2:3)【1.2】
b 比 a 多 50%(2:3:5)【1.2】
第 2 輪:
(從此輪開始,每乙個人的推導,都是以前兩個人未猜出的表現為依據,所以每種情況的解的個數是前兩個之和)
【2.1】a 猜出
(3:2:1)【1.2】
(4:3:1)【1.2】
(3:1:2)【1.3】
(4:1:3)【1.3】
(5:2:3)【1.3】
(8:3:5)【1.3】
【2.2】b 猜出
(1:3:2)【1.3】
(2:5:3)【1.3】
(1:4:3)【1.3】
(2:7:5)【1.3】
(3:4:1)【2.1】
(4:5:1)【2.1】
(3:5:2)【2.1】
(4:7:3)【2.1】
(5:8:3)【2.1】
(8:13:5)【2.1】
【2.3】 c 猜出 (即本題)
以上一共 16 組解,但由於本題要求正整數,所以
數字比例中 c 必須是 144 的約數;
即(3:1:4),(1:3,4),(2:7:9),(4:5:9),(3:5:8)
綜上,本題共有 5 組解:
(36,108)(108,36)(32,112)(64,80)(54,90)
幸好只有 兩輪,如果條件再多一點,恐怕我們就要動用計算機啦!
(嗯,動態規劃嘛,可以當作演算法題)
順便,這裡也給出 第 n 次詢問能等猜出答案的解的個數 a(n) 的遞推公式:
求:通項公式(這個是高中數學誒):
我算出來的結果是:
這個就是大名鼎鼎的
斐波那契數列 的變體,
前 10 項分別是:1,2,4,6,10,16,26,42,68,110……
另外,我還發現了乙個重要結論:
無論初始的三個數是多少,在有限輪內必然會有人猜出;
這個問題就交給大家探索啦;
********************
最後,我有乙個小小的猜測:
這道題目居然出現在【邏輯】而不是【數學】或【演算法】中,那麼出這道題的人,很可能並沒有做對這道題。乙個可能的情況是,他只發現了(36,108)這一組解。
因為,邏輯學教授早已陣亡。
********************
另,做個廣告:
歡迎關注我的知乎專欄:看!你身邊有乙隻數學! - 知乎專欄
2015-03-19
重點在於通過第一輪奠定整個解法的基礎,即逆向思維通過確定每個人可以猜出結果的假設,來給下乙個猜測者增加排除條件,從第二輪開始,輪數多的時候就只能用動態規劃了。
玩個猜數字
本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...
asp數字分頁示例共三個
set rs server.createobject adodb.recordset sql select from 表 rs.open sql,conn,1,1 page cint request page n rs.recordcount rs.pagesize 12 m cint rs.pag...
三個數字比較大小
本題要求將輸入的任意3個整數從小到大輸出。輸入格式 輸入在一行中給出3個整數,其間以空格分隔。輸出格式 在一行中將3個整數從小到大輸出,其間以 相連。相信大家看到這個題目時的第一想法都是,我直接排序就好了。的確,排序是這類問題的通解,任意乙個排序演算法都可以將這道題完美解決。但是博主看到題目中只有三...