1. 程式人生 > >用計算機解決邏輯問題:A、B、C誰說了謊話

用計算機解決邏輯問題:A、B、C誰說了謊話

問題: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