一个教授逻辑学的教授,有三个非常聪明的学生,怎么猜数字的?

不是新问题了,网上没找到满意的答案。 一个教授逻辑学的教授,有三个学生,而且三个学生均非常聪明! 一天教授给他们出了一个题,教授在每个人脑门上贴了一张…
关注者
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)