【发布时间】:2020-08-14 15:05:50
【问题描述】:
问题是创建一个函数来检查该列表中某些项目的线性组合是否等于某个总和。结果将是一个带有元组的列表(与列表的长度相同)。
例如:给定列表:[3,7,10]、sum= 60
结果:[(0, 0, 6), (1, 1, 5), (2, 2, 4), (3, 3, 3), (4, 4, 2), (5, 5, 1), (6, 6, 0), (10, 0, 3), (11, 1, 2), (12, 2, 1), (13, 3, 0), (20, 0, 0)]
问题是列表的长度会有所不同。我尝试使用一堆 if 语句而不是使用 for 循环来解决它,但必须有更有效的方法来解决它。
这是我使用的一些代码。
def get_index(l, s):
res = []
if len(l)==3:
for i in range(s+1):
for j in range(s+1):
for k in range(s+1):
if l[0]*i + l[1]*j + l[2]*k==s:
res.append((i,j,k))
return res
已经谢谢了!!
注意:
如果我确实将范围更改为(s//l[i]+1),它会起作用。
【问题讨论】:
-
展示你尝试过的东西会很好。
-
是的,对不起,我是新来的。
-
@V_Buffalo 欢迎来到 SO。请查看stackoverflow.com/help/someone-answers 以了解如何接受关于 SO 的答案。谢谢。
-
我的解决方案与 Ehsan 的解决方案非常相似,它使用蛮力。然而,这里解释了一种数学方法,我将把它用于非暴力方法。等待更新。
标签: python numpy linear-equation