用計算機解決邏輯問題:A、B、C誰說了謊話
阿新 • • 發佈:2019-02-17
問題:A、B、C三個人中有人說了謊話。A:“B說的是謊話。” B:“C說的是謊話。” C:“A和B說的都是謊話。” 問:誰說了謊話。
人們用邏輯解決這個問題的方法也是假設某一個人說的是謊話,然後看根據題目能不能最後與這個假設矛盾。這也就是迭代法的一種。我們用C語言來代替人腦解決這個問題:
Step 1:將題目翻譯為邏輯符號。
A: 經過思考易知,A為假時B為真,A為真時B為假。因此,A和B不可能同時為真。即 (a||b)==1且(a&&b==0)
B: 與A同理,(b||c)==1且(c&&b==0)
C: 當C為真時,C==1 && A||B==0 當C為假時,C==0 && A||B==1
Step 2:程式碼實現:
#include <stdio.h>
int a,b,c;
int main(void)
{
for(a=0;a<2;a++){
for(b=0;b<2;b++){
for(c=0;c<2;c++)
{
if(
((a||b) && !(a&&b)) &&
((b||c) && !(c&&b)) &&
( c && !(a||b) || ( !c&& (a||b))))
//(a&&b)==0 可以替換為!(a&&b)
{printf("a==%d\n",a);printf("b==%d\n",b);printf("c==%d\n",c);
}
}
}
}
return 0;
}
結果:
a==0
b==1
c==0