我得到了一个谜题并希望用Python解决。
谜题:
一个商人有一个40公斤的重物,他在自己的店里使用。 有一次,它从他手中掉落并被损坏成了4个部分。 但令人惊讶的是,现在他可以使用这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]
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]和[+,-]
组合的列表。
2)是否有更好的方法并告诉我如何从这里继续?
此外,我希望完全不借助任何外部库,只使用Python的标准库。
编辑:对不起,晚了点提供信息。它的答案是(1,3,9,27),我几年前就找到了并且验证了答案。
编辑:目前,fraxel
的答案与time = 0.16 ms
完美地工作。更好、更快的方法总是受欢迎的。
谢谢,
ARK
a-b, a-b+c-d ....
。“减号”表示将重量放在另一侧天平上。我想我需要在问题中解释一下。感谢您的提醒。 - Abid Rahman K