一、题目描述
有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 != BA != CB != C
在这些条件约束下,新郎(A、B、C)和新娘(1、2、3)之间的组合还有哪些可能呢?
我们可以使用穷举法来列出可能的情况。
编写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结婚
新闻热点
疑难解答