打印可以等于给定数字的所有 3 个连续数字

Posted

技术标签:

【中文标题】打印可以等于给定数字的所有 3 个连续数字【英文标题】:Print all the 3 consecutive digits that can be equal to a given number 【发布时间】:2021-01-08 13:23:03 【问题描述】:

我如何编写一个递归回溯函数count(N,S),它打印所有N-digit 数字,使得数字中每3个连续数字的总和完全等于S,其中N将是小于等于 10,取值范围为 0 到 27。

代码:

def count(S):
    n = int(S)
    if n % 3 == 0:
        print(int(n / 3 - 1),int(n / 3),int(n / 3 + 1))
    else:
        print(None)
S = 27
count(S)

样本输出:

8 9 10

我很困惑如何递归编写。

【问题讨论】:

到目前为止你尝试过什么?你卡在哪里了?你解决这个问题的逻辑是什么? 我已经添加了我的代码。 你能提供预期的输出吗? 我提供了预期的输出。 【参考方案1】:

您当前的函数不是递归的。为了使其递归,您基本上必须在count(n, s) 的执行中的某个地方调用count(n-1, s)。一种方法是这样的:

如果n > 1,获取n-1 的可能解决方案并附加任何仍然满足条件的数字 如果n == 0 只返回""(如果函数返回字符串而不是实际整数会更容易)

作为一个生成器函数,这可能看起来有点像这样。当然,您也可以将结果收集到一个列表中并return 他们,或者只是获取这些数字的计数并将其返回。

def count(n, s):
    if n > 0:
        for x in count(n-1, s):
            for d in range(10):
                y = str(d) + x
                if len(y) < 3 or sum(map(int, y[:3])) == s:
                    yield y
    else:
        yield ""

for x in count(5, 15):
    print(x)

【讨论】:

看来是我误解了问题所在。对此感到抱歉。

以上是关于打印可以等于给定数字的所有 3 个连续数字的主要内容,如果未能解决你的问题,请参考以下文章