一、題目描述
有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結婚
|
新聞熱點
疑難解答