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