首 页IT知识库收藏内容
当前位置:翔宇亭IT乐园IT知识库Python

Python逻辑推理:三对情侣到底谁和谁结婚

减小字体 增大字体 作者:本站  来源:本站整理  发布时间:2020-07-06 20:13:39

今天分享并实现一下 @潘石屹 (微博地址:http://blog.sina.com.cn/panshiyi)微博中的题目(#潘石屹用Python解决100个问题#)。

一、题目描述

有3对情侣结婚,假设3个新郎为A、B、C,3个新娘为X、Y、Z。有参加婚礼的人搞不清谁和谁结婚,所以去询问了这6位新人中的3位,得到的回答如下:新郎A说他要和新娘X结婚;新娘X说她的未婚夫是新郎C;而新郎C说他要和新娘Z结婚。听到这样的回答后,提问者以为他们都是在开玩笑,说的都是假话,并且他仍搞不清谁和谁结婚。现在请试着用Python语言编程,推导出到底哪位新郎和哪位新娘结婚?#潘石屹用Python解决100个问题#

二、问题分析

这里需要把题目中的信息转换为程序设计中的问题。

我们把三位新娘(X,Y,Z)分别用1、2、3来表示,三位新郎仍用A、B和C来表示。

则,如果新郎A和新娘X结婚就可以表示为:A ==1,否则就表示为:A != 1;其它与之相同。

则由题目可知,三人开玩笑说了假话,可以写出如下的表达式:

A != 1  即新郎A不和新娘X结婚;
C != 3  即新郎C不和新娘Z结婚;
C != 1  即新郎C不和新娘X结婚;

同时,考虑到新郎之间不能结婚,则还有以下约束条件:

A != B
A != C
B != C

在这些条件约束下,新郎(A、B、C)和新娘(1、2、3)之间的组合还有哪些可能呢?

我们可以使用穷举法来列出可能的情况。

三、Python中的实现

编写Python程序如下:

for A in range(1, 4):
    for B in range(1, 4):
        for C in range(1, 4):
            if A != 1 and C != 1 and C != 3 and A != B and A != C and B != C:
                print(A, B, C)

运行结果如下:

3 1 2

也就是说:

新郎A和编号为3的新娘Z结婚;

新郎B和编号为1的信箱X结婚;

新郎C和编号为2的新娘Y结婚。

为了更直观一点,对上面的程序改造一下,能输出 新郎谁和新娘谁结婚

brides = ('X', 'Y', 'Z'# 用元组存储三位新娘
for A in range(1, 4):
    for B in range(1, 4):
        for C in range(1, 4):
            if A != 1 and C != 1 and C != 3 and A != B and A != C and B != C:
                # print(A, B, C)
                print(f"新郎A要和新娘{brides[A - 1]}结婚")
                print(f"新郎B要和新娘{brides[B - 1]}结婚")
                print(f"新郎C要和新娘{brides[C - 1]}结婚")

输出结果如下

新郎A要和新娘Z结婚
新郎B要和新娘X结婚
新郎C要和新娘Y结婚

Python逻辑推理题,三位新人谁与谁结婚


本文(完)

如有错误之处,请留言评论。

如需转载请注明出处:翔宇亭IT乐园(http://www.biye5u.com)

本文链接地址:http://www.biye5u.com/article/python/2020/6473.html

微信搜索“优雅的代码”关注本站的公众号,或直接使用微信扫描下面二维码关注本站公众号,以获取最新内容。

个人成长离不开各位的关注,你的关注就是我继续前行的动力。

知识评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
愿您的精彩评论引起共鸣,带来思考和价值。
用户名: 查看更多评论
分 值:100分 90分 80分 70分 60分 40分 20分
内 容:
验证码:
关于本站 | 网站帮助 | 广告合作 | 网站声明 | 友情连接 | 网站地图
本站部分内容来自互联网,如有侵权,请来信告之,谢谢!
Copyright © 2007-2024 biye5u.com. All Rights Reserved.