一、題目描述
有3對(duì)情侶結(jié)婚,假設(shè)3個(gè)新郎為A、B、C,3個(gè)新娘為X、Y、Z。有參加婚禮的人搞不清誰和誰結(jié)婚,所以去詢問了這6位新人中的3位,得到的回答如下:新郎A說他要和新娘X結(jié)婚;新娘X說她的未婚夫是新郎C;而新郎C說他要和新娘Z結(jié)婚。聽到這樣的回答后,提問者以為他們都是在開玩笑,說的都是假話,并且他仍搞不清誰和誰結(jié)婚?,F(xiàn)在請(qǐng)?jiān)囍肞ython語言編程,推導(dǎo)出到底哪位新郎和哪位新娘結(jié)婚?#潘石屹用Python解決100個(gè)問題#
這里需要把題目中的信息轉(zhuǎn)換為程序設(shè)計(jì)中的問題。
我們把三位新娘(X,Y,Z)分別用1、2、3來表示,三位新郎仍用A、B和C來表示。
則,如果新郎A和新娘X結(jié)婚就可以表示為:A ==1,否則就表示為:A != 1;其它與之相同。
則由題目可知,三人開玩笑說了假話,可以寫出如下的表達(dá)式:
A != 1 即新郎A不和新娘X結(jié)婚;C != 3 即新郎C不和新娘Z結(jié)婚;C != 1 即新郎C不和新娘X結(jié)婚;
同時(shí),考慮到新郎之間不能結(jié)婚,則還有以下約束條件:
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)
運(yùn)行結(jié)果如下:
3 1 2
也就是說:
新郎A和編號(hào)為3的新娘Z結(jié)婚;
新郎B和編號(hào)為1的信箱X結(jié)婚;
新郎C和編號(hào)為2的新娘Y結(jié)婚。
為了更直觀一點(diǎn),對(duì)上面的程序改造一下,能輸出 新郎誰和新娘誰結(jié)婚 。
brides = ('X', 'Y', 'Z') # 用元組存儲(chǔ)三位新娘
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]}結(jié)婚")
print(f"新郎B要和新娘{brides[B - 1]}結(jié)婚")
print(f"新郎C要和新娘{brides[C - 1]}結(jié)婚")
輸出結(jié)果如下:
新郎A要和新娘Z結(jié)婚
新郎B要和新娘X結(jié)婚
新郎C要和新娘Y結(jié)婚
新聞熱點(diǎn)
疑難解答
圖片精選