我有一个难题,我想用 Python 解决它。
谜:
一位商人有一个 40 公斤的重量,他在他的商店中使用。有一次,它从他手中掉了下来,碎成了四块。但令人惊讶的是,现在他可以通过这 4 件的组合来称重 1 公斤到 40 公斤之间的任何重量。
所以问题是,这 4 件的重量是多少?
现在我想用 Python 解决这个问题。
我从这个谜题中得到的唯一限制是 4 块的总和是 40。这样我就可以过滤总和为 40 的所有 4 个值的集合。
import itertools as it
weight = 40
full = range(1,41)
comb = [x for x in it.combinations(full,4) if sum(x)==40]
length of comb = 297
现在我需要检查每组值comb
并尝试所有操作组合。
例如,如果(a,b,c,d)
是 中的第一组值comb
,我需要检查a,b,c,d,a+b,a-b, .................a+b+c-d,a-b+c+d........
等等。
我尝试了很多,但我被困在这个阶段,即如何检查所有这些计算组合到每组 4 个值。
问题 :
1)我认为我需要列出所有可能的组合[a,b,c,d] and [+,-]
。
2)有没有人有更好的主意并告诉我如何从这里继续前进?
另外,我想在没有任何外部库的帮助下完全做到这一点,只需要使用 python 的标准库。
编辑:对不起,迟到的信息。它的答案是 (1,3,9,27),这是我几年前发现的。我已经检查并验证了答案。
编辑:目前,fraxel
的答案与time = 0.16 ms
. 更好更快的方法总是受欢迎的。
问候
方舟