Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
Clone or download
爱因斯坦的思考题.py 4.55 KB
Copy Edit Web IDE Raw Blame History
徒步天下 authored 2018-02-08 14:56 . 新建 爱因斯坦的思考题.py
"""爱因斯坦的思考题
这是一个很有趣的逻辑推理题,传说是爱因斯坦提出来的,他宣称世界上只有2%的人能解出这个题目,
传说不一定属实,但是这个推理题还是很有意思的。
题目是这样的,据说有五个不同颜色的房间排成一排,每个房间里分别住着一个不同国籍的人,
每个人都喝一种特定品牌的饮料,抽一种特定品牌的烟,养一种宠物,没有任意两个人抽相同品牌的香烟,
或喝相同品牌的饮料,或养相同的宠物,问题是谁在养鱼作为宠物?
为了寻找答案,爱因斯坦给出了十五条线索:
(1)、英国人住在红色的房子里;
(2)、瑞典人养狗作为宠物;
(3)、丹麦人喝茶;
(4)、绿房子紧挨着白房子,在白房子的左边;
(5)、绿房子的主人喝咖啡;
(6)、抽PallMall牌香烟的人养鸟;
(7)、黄色房子里的人抽Dunhill牌香烟;
(8)、住在中间那个房子里的人喝牛奶;
(9)、挪威人住在第一个房子里面;
(10)、抽Blends牌香烟的人和养猫的人相邻;
(11)、养马的人和抽Dunhill牌香烟的人相邻;
(12)、抽BlueMaster牌香烟的人喝啤酒;
(13)、德国人抽Prince牌香烟;
(14)、挪威人和住在蓝房子的人相邻;
(15)、抽Blends牌香烟的人和喝矿泉水的人相邻。
"""
import itertools
import sys
country = ['英国人', '瑞典人', '丹麦人', '挪威人', '德国人']
house = ['红房子', '白房子', '绿房子', '黄房子', '蓝房子']
drink = ['茶', '咖啡', '牛奶', '啤酒', '矿泉水']
smoke = ['PallMall', 'Dunhill', 'Blends', 'BlueMaster', 'Prince']
pet = ['狗', '鸟', '猫', '马', '鱼']
country_list = list(itertools.permutations(country))
# (9)、挪威人住在第一个房子里面;
for x in country_list[:]:
if x.index('挪威人') not in [0, 4]:
country_list.remove(x)
house_list = list(itertools.permutations(house))
#(4)、绿房子紧挨着白房子,在白房子的左边;
for x in house_list[:]:
if x.index('绿房子') - x.index('白房子') not in [-1, 1]:
house_list.remove(x)
#(8)、住在中间那个房子里的人喝牛奶;
drink_list = [x for x in list(itertools.permutations(drink)) if x[2]=='牛奶']
smoke_list = list(itertools.permutations(smoke))
pet_list = list(itertools.permutations(pet))
a = []
for c in country_list:
for h in house_list:
if c.index('英国人')!=h.index('红房子'):
# (1)、英国人住在红色的房子里;
continue
if c.index('挪威人') - h.index('蓝房子') not in [-1, 1]:
#(14)、挪威人和住在蓝房子的人相邻;
continue
for d in drink_list:
if c.index('丹麦人') != d.index('茶'):
# (3)、丹麦人喝茶;
continue
if h.index('绿房子') != d.index('咖啡'):
# (5)、绿房子的主人喝咖啡;
continue
for s in smoke_list:
if c.index('德国人') != s.index('Prince'):
# (13)、德国人抽Prince牌香烟;
continue
if h.index('黄房子') != s.index('Dunhill'):
# (7)、黄色房子里的人抽Dunhill牌香烟;
continue
if d.index('啤酒') != s.index('BlueMaster'):
# (12)、抽BlueMaster牌香烟的人喝啤酒;
continue
if d.index('矿泉水') - s.index('Blends') not in [-1, 1]:
# (15)、抽Blends牌香烟的人和喝矿泉水的人相邻。
continue
for p in pet_list:
if c.index('瑞典人') != p.index('狗'):
# (2)、瑞典人养狗作为宠物;
continue
if s.index('PallMall') != p.index('鸟'):
# (6)、抽PallMall牌香烟的人养鸟;
continue
if s.index('Blends') - p.index('猫') not in [-1, 1]:
# (10)、抽Blends牌香烟的人和养猫的人相邻;
continue
if s.index('Dunhill') - p.index('马') not in [-1, 1]:
# (11)、养马的人和抽Dunhill牌香烟的人相邻;
continue
plan = [c, h, d, s, p]
print(c[p.index('鱼')])
sys.exit()

Comment ( 0 )

Sign in for post a comment