离散数学 谁在说谎类型代码实现

#例2.6 王教授是哪里人
#p:王教授是j城人 q;王教授是k城人 r;王教授是l城人
l=[0,1]
for p in l:
for q in l:
for r in l:
a=(p==0 and q==1)
a1=((p==0 and q==1) or (p==1 and q==1))
a2=(p==1 and q==0)
b=(p==1 and q==0)
b1=((p==0 and q==0) or (p==1 and q==1))
b2=(p==0 and q==1)
c=(q==0 and r==0)
c1=((q==1 and r==0) or (q==0 and r==1))
c2=(q==1 and r==1)
if (a+b1+c2==3 and p+q+r==1) or (a+b2+c1==3 and p+q+r==1)
or (a1+b+c2==3 and p+q+r==1) or (a2+b+c1==3 and p+q+r==1)
or (a1+b2+c==3 and p+q+r==1) or (a2+b1+c1==3 and p+q+r==1):
print("p:{},q:{},r:{}".format(p,q,r))

#P45 29
#a:王是职位a a1:王是职位b a2:王是职位c
#b:李是职位a b1:李是职位b b2:李是职位c
#c:丁是职位a c1:丁是职位b c2:丁是职位c
i=[0,1]
for a in i:
for b1 in i:
for c in i:
for a1 in i:
for b in i:
for a2 in i:
for b2 in i:
for c1 in i:
for c2 in i:
s1=((a==0 and b1==1) or (a==1 and b1==0))
s2=((c==0 and a1==1) or (c==0 and a1==0))
s3=((b==0 and a2==1) or (b==0 and a2==1))
if s1+s2+s3==3 and a+a1+a2==1 and b+b1+b2==1 and c+c1+c2==1
and (a)+(a1)+(a2)+(b)+(b1)+(b2)+(c)+(c1)+(c2)==3:
print("a:{},a1:{},a2:{},b:{},b1:{},b2:{},c:{},c1:{},c2:{}".format(a,a1,a2,b,b1,b2,c,c1,c2))

#P45 30
#赵为p,钱为q,孙为r,李为s,周为t:0是不去,1是去
for p in [0,1]:
for q in [0,1]:
for r in [0,1]:
for s in [0,1]:
for t in [0,1]:
a=(p==1 and q==1)or(p==0 and q==1)or(p==0 and q==0)#条件1
b=(s==1 and t==0)or(s==0 and t==1)or(s==1 and t==1)#条件2
c=(q==1 and r==0)or(q==0 and r==1)#条件3
d=(r==1 and s==1)or(r==0 and s==0)#条件4
e=(t==0 or (p==1 and q==1))#条件5
if(a+b+c+d+e==5):
print("p:{},q:{},r:{},s:{},t:{}".format(p,q,r,s,t))

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值