如何解决这个难题?

Fro*_*ins 1 c c++ java puzzle math

免责声明:这不是一个家庭作业问题.我偶然发现了这个难题,在这里,我也有了答案.但是,我无法找到解决问题的方法.

谜题如下:

大卫的孩子年龄的产物是他们年龄总和的平方.大卫不到八个孩子.他的孩子都没有同龄.他的孩子都没有超过14岁.他的所有孩子都至少两岁.大卫有多少个孩子,他们的年龄是多少?

答案恰好是2,4,6,12.

请建议一种以编程方式解决此问题的方法.

Bil*_*nch 5

在Python中(这不是你问的,但你更需要一个算法):

import operator
import itertools

possible_ages = range(2,15)

# If the list of ages passed to this function returns true, then this solves the puzzle.
def valid(ages):
    product_of_ages = reduce(operator.mul, ages, 1)
    square_of_sum_of_ages = reduce(operator.add, ages, 0) ** 2
    return product_of_ages == square_of_sum_of_ages

for number_of_children in range(1, 9):
    for ages in itertools.combinations(possible_ages, number_of_children):
        if valid(ages):
            print ages
Run Code Online (Sandbox Code Playgroud)

并且几乎立即打印:

(2, 4, 6, 12)
Run Code Online (Sandbox Code Playgroud)