打印可以等于给定数字的所有 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,