一个教授逻辑学的教授,有三个非常聪明的学生,怎么猜数字的?
关注者
5,257被浏览
748,352登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏
#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'FreeMind'
class Solution:
def __init__(self, rounds, person, number):
self.rounds = rounds
self.person = person
self.number = number
def solution(self):
if self.rounds == 1:
if self.person == 1:
return [[2, 1, 1]]
elif self.person == 2:
return [[1, 2, 1], [2, 3, 1]]
else:
return [[1, 1, 2], [2, 1, 3], [1, 2, 3], [2, 3, 5]]
a = [[2, 1, 1]]
b = [[1, 2, 1], [2, 3, 1]]
c = [[1, 1, 2], [2, 1, 3], [1, 2, 3], [2, 3, 5]]
results = [a, b, c]
iterationNumber = (self.rounds - 2) * 3 + self.person
for i in range(iterationNumber):
if i % 3 == 0:
results[0] = [[x[1]+x[2], x[1], x[2]] for x in results[1] + results[2]]
elif i % 3 == 1:
results[1] = [[x[0], x[0]+x[2], x[2]] for x in results[0] + results[2]]
else:
results[2] = [[x[0], x[1], x[0]+x[1]] for x in results[0] + results[1]]
return results[self.person-1]
def __str__(self):
result = filter(lambda x:not self.number%max(x), self.solution())
result = map(lambda x:[x[0]*self.number/sum(x)*2, x[1]*self.number/sum(x)*2, x[2]*self.number/sum(x)*2],result)
res = ''
for i in result:
res += str(i)+"\n"
return res.replace('[','(').replace(']', ')')
__repr__ = __str__
if __name__ == '__main__':
print Solution(2, 3, 144) #对应位置参数依次为轮数,最先知道答案的人,所知结果
## print:
## (108, 36, 144)
## (64, 80, 144)
## (54, 90, 144)
## (36, 108, 144)
## (32, 112, 144)