用计算机解决逻辑问题: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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值