2015-02-08 79 views
0

有一個問題,我遇到了問題。查找#個真值組合#

p,q和r的真值有多少組合使這個表達式成立? (p & &!q)|| (q ||!r)

我知道答案是7,但我不知道他們是如何得到答案的。我可以簡單地測試每種組合(8是最大值,2^3),但是有沒有更快的方法可以做到這一點?表達式可以簡化嗎?

+0

謝謝,我也忘了注意我沒有想到要創建一個程序。我正在學習競爭力的計算機科學測試,這是我頭腦麻煩的問題。 – 2015-02-08 00:19:20

回答

1

這當然不需要詳盡的搜索。您可以推理如下:

  1. 由於你知道,4個組合與r == false滿足表達
  2. 由於|| !r|| q你知道,剩下的4種組合中,2 q == true滿足表達式
  3. 由於(p && !q)你知道,剩下的2種組合都有q == false(因爲你已經考慮到上述情況,其中q == true)等的1 p == true滿足式

添加那些你有7個組合滿足表達式。

至於簡化表達式,(p && !q) || q相當於p || q。所以表達式可以簡化爲p || q || !r。這也可以表示爲!(!p && !q && r),這就很明顯爲什麼有7種組合:只有一種組合不滿足表達式。

0

爲了回答第二個問題, 「可以將它簡化?」:在布爾代數,表達

a || (!a && b) 

相當於

a || b 

尋找在原始表達式:

(p && !q) || (q || !r) 

請注意||是關聯的(所以&& ),因此,你可以重新排列括號:

((p && !q) || q) || !r 

與第一部分是在我的答案上等價的情況下,從而

((p && !q) || q) 

相當於

p || q 

(注意||&&都是可交換的),所以整個表達式相當於

p || q || !r