离散数学,王教授是哪里人?逻辑+代码

注:Û就是等价号;代码水,有点取巧,别介意

在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下:
甲:王教授不是苏州人,是上海人.
乙:王教授不是上海人,是苏州人.
丙:王教授既不是上海人,也不是杭州人.
听完这3人的判断后,王教授笑着说,你们3人中有一人说得全对,有一人说对了一半,另一人说得全不对,试用逻辑演算分析王教授到底是哪里人.
 设命题:
p:王教授是苏州人.
g:王教授是上海人.
r:王教授是杭州人,
p, q, r中必有一个真命题,两个假命题,要通过逻辑演算将真命题找出来.
甲的判断为:¬p∧q
乙的判断为:p∧¬q
丙的判断为:¬q∧¬r
于是
甲的判断全对为 :B1=¬p∧q
甲的判断一半对为:B2=(¬p∧¬q)V(p∧q)
甲的判断全错为:B3=p∧¬q
乙的判断全对为:C1=p∧¬q
乙的判断一半对为:C2=(p∧q)V(¬p∧¬q)
乙的判断全错为 :C3=¬p∧q
丙的判断全对为:D1=¬q∧¬r
丙的判断一半对为:D2=(¬q∧r)V(q∧¬r)
丙的判断全错为 :D3=q∧r
由王教授所说:
E=(B1∧C2∧D3)V(B1∧C3∧D2)V(B2∧C1∧D3)V(B2∧C3∧D1)V(B3∧C1∧D2)V(B3∧C2∧D1)
为真命题,而
B1∧C2∧D3=(¬p ∧ q)∧((p ∧ q)V(¬p∧¬q))∧(q ∧ r)
                   Û (¬p ∧ q)∧((p ∧ q ∧ q ∧r)V(¬p∧¬q ∧ q ∧r))
                   Û¬p ∧ q)∧((p ∧ q ∧ r)V0)
                   Û (¬p ∧ q)∧(p ∧ q ∧ r)
                   Û0

B1∧C3∧D2=(¬p ∧ q)∧(¬p ∧ q)∧((¬q ∧ r)V(q∧¬r))
                   Û (¬p ∧ q ∧¬q ∧r)V(¬p ∧ q ∧ q ∧ ¬r)
                   Û ¬p ∧ q∧¬r

B2∧C1∧D3=((¬p ∧¬q)V(p ∧ q))∧(p ∧ ¬q)∧(q ∧ r)
                   Û ((¬p ∧¬q)V(p ∧ q))∧(p∧¬q ∧ q ∧ r)
                   Û ((¬p ∧¬q)V(p ∧q))∧0
                   Û 0

类似可得
B2∧C3∧D1 Û 0
B3∧C1∧D2Û p∧¬q ∧ r
B3∧C2∧D1 Û 0

于是,由同一律可知
E Û (¬p ∧ q∧¬r)V(p∧¬q ∧ r)

但因为王教授不能既是苏州人,又是杭州人,因而p,r必有一个假命题,即p ∧ r Û 0.于

E Û ¬p ∧ q∧¬r

为真命题,因而必有p,r为假命题,q为真命题,即王教授是上海人,甲说得全对,丙说

对了一半,而乙全说错了。

for p in range(2):
    for q in range(2):
        for r in range(2):
            if (p==1 and q==1):#先进行条件判断
                continue
            if (p==1 and r==1):
                continue
            if (q==1 and r==1):
                continue
            if (q==1 and p==1 and r==1):
                continue
            #把三人的判断用命题表示
            J=(not p) and q
            Y=p and (not q)
            B=(not q) and (not r)
            #甲各种判断情况
            B1=(not p) and q
            B2=((not p) and (not q)) or (p and q)
            B3=p and (not q)
            #乙各种判断情况
            C1=p and (not q)
            C2=(p and q) or ((not p) and (not q))
            C3=(not p) and q
            #丙各种判断情况
            D1=(not q) and (not r)
            D2=((not q) and r) or (q and (not r))
            D3=q and r
            #联立王教授所言的命题
            E=(B1 and C2 and D3)or(B1 and C3 and D2)or(B2 and C1 and D3)or(B2 and C3 and D1)or(B3 and C1 and D2)or(B3 and C2 and D1)
            if E ==1:
                print("p=%d,q=%d,r=%d E=%d,J=%d,Y=%d,B=%d"%(p,q,r,E,J,Y,B))
                if ((not p)==1 and q==0) or ((not p)==0 and q==1):
                    if Y==1:
                        print("其中乙全对,甲对一半的,丙全错。")
                    else:
                        print("其中丙全对,甲对一半的,乙全错。")
                if (p==0 and (not q)==1)or (p==1 and (not q)==0):
                    if J==1:
                        print("其中甲全对,乙对一半,丙全错。")
                    else:
                        print("其中丙全对,乙对一半的,甲全错。")
                if ((not q)==1 and(not r)==0)or((not q)==0 and(not r)==1):
                    if J==1:
                        print("其中甲全对,丙对一半,乙全错。")
                    else:
                        print("其中乙全对,丙对一半的,甲全错。")
                if p==1:
                    print("王教授是苏州人")
                if q==1:
                    print("王教授是上海人")
                if r==1:
                    print("王教授是杭州人")

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉蕤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值