猜猜我们的职位是什么?

在离散课本里,我发现了一个特别有趣的问题,问题如下:

在某班班委成员的选举中,已知王小红、李强、丁金生三位同学被选进了班委会,该班的甲,乙,丙三名学生预言如下:
甲说:王小红为班长,李强为生活委员。
乙说:丁金生为班长,王小红为生活委员。
丙说:李强为班长,王小红为学习委员。
班委会分工名单公布后发现,甲、乙、丙三人都恰好猜对了一半,问:王小红、李强、丁金生各任何职?

哈哈,相信您看了这个问题也很感兴趣吧,下面来和我一起解决这个有趣的问题吧!

首先,我们还是利用一个列表,与以往不同的是,这次列表里装的“123”,这样可以更方便我们来解决这个问题,我们首先定义1代表班长,2代表学习委员,3代表生活委员,不然到后面我们可能都分不清谁是谁了。言归正传,我们还是使用三层循环来决解,同时利用w、li、d来分别代表‘王小红’、‘李强’、‘丁金生’,同时还是将这三个预言转化为三个真值,后面为语言正确的结果,由于结果说每个预言都是一半对一半错,所以我们在真值结果后面用‘or’而不是‘and’,例如第一个预言:王小红为班长,李强为生活委员。由此我们可得w=1或者li=3,转化编程语言就是“w==1 or li==3”,通过这样的形式来限定真值,同理其他两个预言也是这样的方法,只需要保证真值是1并且和题目符合即可,最后我们再利用三个预言的真值都是1,并且他们三个每个人都有一个职位,所以限定条件为“s1+s2+s3=3 并且 w+li+d=6”转化为编程语言就是“s1+s2+s3==3 and w+li+d==6”,这样我们便可以将这个有趣的问题解决了。代码结果如下:

ls=[1,2,3]
#1是班长,2是学习委员,3是生活委员;
#w是王小红,li是李强,d是丁金生
for w in ls:
    for li in ls:
        for d in ls:
            s1=(w==1or li==3)
            s2=(d==1or w==3)
            s3=(li==1or w==2)
            if(s1+s2+s3==3 and w+li+d==6):
                print("w:{},li:{},d:{}".format(w,li,d))
            # 1是班长,2是学习委员,3是生活委员;
            # w是王小红,li是李强,d是丁金生
            #结果为王小红是学委,李强是生活委员,丁金生是班长

由代码的运行结果可知王小红是学习委员、李强是生活委员、丁金生是班长。

希望这个有趣的问题可以让您感兴趣呢,谢谢您的观看,真诚地希望我的过程对您有帮助!

  • 27
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值