我怎么做100 = 1? (解释)

时间:2017-10-21 19:41:21

标签: math formula python-3.6

现在我有一个代码,可以使用大于零且小于该值的数字找到值之和的组合数。 我需要更改值以扩展组合,使其包含的不仅仅是值。

例如:     数字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年的数字也将是列出值= 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))

1 个答案:

答案 0 :(得分:0)

您似乎有多个问题。

要重复添加整数的十进制数字,直到您以一位数结尾,您可以使用此代码。

9

这就像你描述的那样。但是,有一种更简单的方法。重复添加数字的十进制数字称为casting out nines,并生成数字的digital root。除了您希望获得1而不是d = val % 9 if d == 0: d == 9 的结果之外,这几乎等于除以9时的剩余数字。这样更简单,更快速的代码

d = (val - 1) % 9 + 1

或者更短但更棘手的

d = val % 9 or 9

或者甚至更棘手的

7

要查找最终结果为1 的所有数字(例如,或97中的任何数字),您只需要所有数字余数9除以7。所以从9开始并继续添加7,您就可以获得所有这些值。

用于查找16的所有分区然后将它们排列成数字的方法要复杂得多,速度要慢得多。

要查找最终为9 的所有数字(例如,或任何大于7的整数),您当前的方法可能是最佳选择。否则,如果不经过25,就很难避免直接添加到16或{{1}}的数字。如果这是你的意思,请在你的问题中这样说,我们可以进一步研究这种情况。

相关问题