'''
某公司的两位科学家(甲、乙)去吃饭,
坐在一家酒店靠近街道的窗口座位吃饭,
在等待上菜的过程中,闲极无聊,
甲向乙出了一道猜三个女儿年龄的题目。
甲:我有3个女儿,3人年龄之积等于36;
乙:猜不出来;
甲:3个女儿年龄之和等于街道上的行人数;
乙:还是无法确定;
甲:我的大女儿叫苏珊。
乙:哦,我知道了。
请问,甲的3个女儿年龄各是多少?
'''
#定义一个年龄集
#因为0岁还没出生,所有从1开始
#因为 “我有3个女儿,3人年龄之积等于36” 所以最大就是36
ageList = list(range(1,37))
ageGroup = [] #用来保存所有组合
sumGroup = []
def getAgeGroup(x, y, z):
'''计算所有乘积等于36的组合'''
temp = []
if x * y * z == 36:
temp.append(x)
temp.append(y)
temp.append(z)
#对组合排序。[1,1,2] [2,1,1],[1,2,1],这三中组合我们认为是一种,
#因为我们不关心三个女儿站的位置
temp.sort()
#对排序后的组合去重
if temp not in ageGroup:
ageGroup.append(temp)
def getSum():
'''
甲:3个女儿年龄之和等于街道上的行人数;
乙:还是无法确定;
这段对话可以看出,在组合中有“年龄和”相同的情况
'''
tempList = [] #用来保存所有年龄和
for temp in ageGroup:
tempList.append(sum(temp))
#获取所有年龄和中重复的数
for a in tempList:
findCount = tempList.count(a)
#如果出现一次以上,我们得到该数字,并将重复的去掉
if findCount > 1:
tempList.remove(a)
#查看当年龄之和有重复的组合
for item in ageGroup:
if sum(item) == a:
'''
甲:我的大女儿叫苏珊。
乙:哦,我知道了。
从这段话得到,它有个大女儿(即年龄大的,肯定不是双胞胎。)
'''
#在组合中查看最大值唯一的情况
if item.count(max(item)) == 1:
print(item)
if __name__=='__main__':
for p1 in ageList:
for p2 in ageList:
for p3 in ageList:
getAgeGroup(p1, p2, p3)
getSum() # 2, 2, 9
三女儿年龄 Python实现
最新推荐文章于 2020-06-08 16:55:40 发布