【问题标题】:How do I make 100 = 1? (explanation within)我如何使 100 = 1? (内解释)
【发布时间】: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


【解决方案1】:

您似乎有多个问题。

要重复添加整数的小数位,直到以单个数字结尾,您可以使用此代码。

d = val
while d > 9:
    d = sum(int(c) for c in str(d))

这就像你描述的那样。但是,有一种更简单的方法。重复添加数字的十进制数字称为casting out nines,并导致该数字的digital root。这几乎等于该数字除以 9 后的余数,只是您希望得到9 而不是1 的结果。所以更容易和更快的代码是

d = val % 9
if d == 0:
    d == 9

或者也许更短但更棘手

d = (val - 1) % 9 + 1

或者更棘手的

d = val % 9 or 9

要查找以7 结尾的所有数字(例如,或从19 的任何数字),您只需要除以余数为7 的所有数字通过9。所以从7 开始,然后继续添加9,你就会得到所有这些值。

您用来查找7 的所有分区然后将它们排列成数字的方法比必要的要复杂和慢得多。

要查找所有以16 结尾的数字(例如,或任何大于9 的整数),您当前的方法可能是最好的。否则很难避免直接添加到725 而不经过16 的数字。如果这确实是您的意思,请在您的问题中这样说,我们可以进一步研究这种情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    • 2010-09-19
    • 2021-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    相关资源
    最近更新 更多