打印可以等于给定数字的所有 3 个连续数字
Print all the 3 consecutive digits that can be equal to a given number
我如何编写一个递归回溯函数 count(N,S)
,它打印所有 N
位数字,使得数字中每 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
我很困惑如何递归地写这个。
您当前的函数不是递归的。要使其递归,您基本上必须在 count(n, s)
的执行过程中的某处调用 count(n-1, s)
。一种方法是这样的:
- 如果
n > 1
,获取 n-1
的可能解决方案并追加仍然满足条件 的任何数字
- if
n == 0
just return ""
(如果函数 return 是字符串,而不是实际整数会更容易一些)
作为生成器函数,它看起来有点像这样。当然,您也可以将结果收集在列表中并 return
它们,或者只计算这些数字的数量并 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)
我如何编写一个递归回溯函数 count(N,S)
,它打印所有 N
位数字,使得数字中每 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
我很困惑如何递归地写这个。
您当前的函数不是递归的。要使其递归,您基本上必须在 count(n, s)
的执行过程中的某处调用 count(n-1, s)
。一种方法是这样的:
- 如果
n > 1
,获取n-1
的可能解决方案并追加仍然满足条件 的任何数字
- if
n == 0
just return""
(如果函数 return 是字符串,而不是实际整数会更容易一些)
作为生成器函数,它看起来有点像这样。当然,您也可以将结果收集在列表中并 return
它们,或者只计算这些数字的数量并 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)