Intoweb
莎士比亞在《威尼斯商人》中寫到,向富家少女鮑西婭求婚需要破解猜盒問題。鮑西婭有金、銀、鉛三個盒子,其中只有一個盒子放有鮑西婭肖像,盒子上面分別刻有三句話,求婚者通過這三句話,判斷肖像放在哪只盒子里。三個盒子上刻的三句話分別是:
金盒子:“肖像不在此盒子中。”
銀盒子:“肖像在鉛盒中?!?/p>
鉛盒子:“肖像不在此盒中?!?/p>
這三句話中,只有一句是真的。
使用邏輯推理就能判斷出肖像在金盒子中。因為銀盒子和鉛盒子上的話是矛盾關系,必有一真一假。三句話中最多只有一句為真,如果銀盒子為真,那么金盒子也為真,就有兩句話為真,不符合題意;所以一定是銀盒子為假,那么鉛盒子為真,金盒子和銀盒子為假,滿足題意??赏瞥鲂は裨诮鸷凶又小?/p>
在編程中我們通過判斷布爾型值也可以完成以上的推理題,算出滿足題目的答案。
所謂布爾型值,它是常見數(shù)據(jù)分類中的一種,如:
1、2、3、4、-1、0、1.2,100.5等等整數(shù)或者小數(shù)被稱為數(shù)值型數(shù)據(jù)或者數(shù)字型數(shù)據(jù);
“哈哈”、“A”、“a”、“小狗”等等字母或者漢字被稱為字符型數(shù)據(jù);
5>4,a<6、b>3,a<6與b>3、b=4或b>4,b<4不成立等等表示兩值之間關系的叫條件表達式,用邏輯運算符“與”、“或”、“不成立”連接的兩個或者多個條件表達式形成的表達式被稱為布爾型數(shù)據(jù)類型,布爾型值的結果只有兩種,要么為真(1)要么為假(0)。
下面以一道猜盒子的題目為例,我們學習通過靈活運用布爾型值解決邏輯推理問題的方法。
有金、銀、銅、錫的四個盒子,每個盒子上都有一句話但是有一句話是假的,并且只有一個盒子里裝有肖像,通過這四句話分析肖像到底在哪個盒子中。
1. 金盒子:“肖像不在此盒子中?!?/p>
2. 銀盒子:“肖像在銅盒子中?!?/p>
3. 銅盒子:“肖像不在銀盒子中?!?/p>
4. 錫盒子:“肖像在金盒子中?!?p>
由于肖像到底在哪個盒子中還是一個未知的問題,可能在任意盒子中,所以我們將肖像所在的盒子數(shù)設定為變量,為了方便表示,我們分別用1、2、3、4代表金盒子、銀盒子、銅盒子、錫盒子;只要能滿足有一句話是假的,三句話是真的就能確定答案。由于一個條件(布爾型值)的結果要么為真(1)要么為假(0),所以只要所有條件的布爾型值加起來等于3就表示有三句為真。
將已知條件轉化為邏輯表達式,如下表。那么肖像在某個盒子中轉為邏輯表達式就是,金:肖像=1,銀:肖像=2,銅:肖像=3,錫:肖像=4。
比如第一個條件“肖像不在金盒子中”,轉為邏輯表達式為<肖像=1>不成立,那么四個盒子判斷布爾型值的結果依次為0,1,1,1。
將四個盒子上的條件的判斷布爾型值填入表格,用只有一句話是假的作為最終判斷條件:<肖像=1>不成立+<肖像=3>+<肖像=2>不成立+<肖像=4>=3。哪個盒子的布爾型值和為3就為需要的結果(見下表)。
本例使用變量、條件判斷以及重復執(zhí)行來編寫算法程序解決邏輯推理題,通過判斷布爾型值推理出滿足題目的答案,從而達到訓練邏輯思維能力的目的。那么如果盒子上的話只有一句是真的,請問肖像放在哪里?稍微修改一下四個值之和為1即可。