打印可以等于给定数字的所有 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 个连续数字的主要内容,如果未能解决你的问题,请参考以下文章

L1-006 连续因子 (20分) 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3×5×6×7,其中 567 就是 3 个连续的数字。给定任一正整数 N,要求编写程序

2022-09-09:给定一个正整数 n,返回 连续正整数满足所有数字之和为 n 的组数 。 示例 1: 输入: n = 5 输出: 2 解释: 5 = 2 + 3,共有两组连续整数([5],[2,

给定数字 n,如何打印大小为 m 的所有子序列?

180. 连续出现的数字

Leetcode刷SQL 3连续出现的数字

用SQL计算同一个字符(汉字、字母、数字、表情、符号)连续重复出现的次数