【发布时间】:2017-10-21 19:41:21
【问题描述】:
现在我有一个代码,可以使用大于零和小于该值的数字找到一个值的总和的组合数。 我需要更改值以扩展组合,以便它们包含的不仅仅是值。
例如: 数字 10 产生结果: [1, 2, 3, 4], [1, 2, 7], [1, 3, 6], [1, 4, 5], [1, 9], [2, 3, 5], [2, 8], [3, 7], [4, 6] 但我需要将其扩展到包括任何折叠为 1 的数字。因为从本质上讲,我需要 100 = n,因为数字中各个数字的总和 = n。所以在这种情况下 100 = 1 因为 100 --> 1+0+0 = 1 因此,数字 1999 也将是列出 value = 100 的有效组合,因为 1999 = 1+9+9+9 = 28,并且 28 = 2+8 = 10,并且 10 = 1+0 = 1
现在我意识到这将产生无限系列的组合,因此我需要为我想要获取数据的范围设置限制。这是我用来查找组合的当前代码。
def a(lst, target, with_replacement=False):
def _a(idx, l, r, t, w):
if t == sum(l): r.append(l)
elif t < sum(l): return
for u in range(idx, len(lst)):
_a(u if w else (u + 1), l + [lst[u]], r, t, w)
return r
return _a(0, [], [], target, with_replacement)
for val in range(100,101):
s = range(1, val)
solutions = a(s, val)
print(solutions)
print('Value:', val, "Combinations", len(solutions))
【问题讨论】:
-
您的问题到底是什么?
-
我正在尝试查找折叠为单个整数的数字的组合。所以 n = 124 将折叠为 7,因为数字内的整数之和 = 7,1+2+4=7。在这种情况下,数字 124 将是 n = 7 的有效组合。另一个可接受的组合是 601,因为整数加起来为 7,6+0+1 = 7。同样适用于更大的数字,只是有额外的步骤,1285 是可接受的组合,因为 1+2+8+5 = 16,然后形成 1+6 = 7。
-
是的,我明白你想要做什么。但是你问我们什么?您希望我们为您编写代码以实现您的目的还是您有更具体的问题?
-
更具体地说,我的问题是,我如何取 123 之类的值并将其中的整数分隔为 '1'、'2'、'3' 以便我可以将它们加在一起并得到一个输出是总和,在这种情况下是 7。我想重复这个过程,直到我得到一个数字。所以如果它是一个更大的数字,1234,当我将整数分开并将它们加在一起时,它们将等于 11,从那里我想再次重复这个过程,所以我得到 2。
标签: math formula python-3.6