只有一個人說了真話!通解代碼——python
不管幾個人說了這話,代碼邏輯都是一樣的,無非參數不同。
例
大老鼠發現家里的奶酪少了一大塊,審問四只小老鼠ABCD,其實只有一只老鼠偷吃了奶酪。
A說: 我沒吃。
B說: 是C吃的。
C說: 肯定是D吃的。
D說: C在冤枉我。
己知四只小老鼠中有一只說的是真話,三只說的是假話。
到底是誰偷吃了奶酪。
### 如果題目變化只要修改這里就好了
# 列出證詞,1代表做了,0代表沒做
dic = {
"A": {("A", 0)},
"B": {("D", 1)},
"C": {("B", 1)},
"D": {("D", 0)},
}
true_num = 1 # 幾個人說了真話
###
# 循環假設是誰做了
for do in dic.keys():
l = {(i, 1 if i == do else 0) for i in dic.keys()} # 列出全場情況
num = 0 # 記錄真話的次數
true_list = []
# 用集合判斷是否說了真話
# 證詞 和 實際情況 取交集 等于 證詞,代表說了真話
for dwho, ddo in dic.items(): # 依次判斷
if (l & ddo) == ddo:
num += 1
true_list.append(dwho)
if num == true_num: # 判斷是否正確
print(f"{'、'.join(true_list)}說了真話,{do}干的")
# ==> D說了真話,A干的

浙公網安備 33010602011771號