python - 打印可以等于给定数字的所有 3 个连续数字
问题描述
如何编写一个递归回溯函数count(N,S)
,在该函数中打印所有N
-digit 数字,使得数字中每 3 个连续数字的总和正好等于小于或等于 10 的位置,并且是从 0 到 27 S
。N
代码:
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-1, s)
在count(n, 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)
推荐阅读
- c# - 拾取脚本分配变量和更新文本
- c - Doxygen - 记录 X 宏
- node.js - MERN APP - 如何使用上下文 api 在我的反应组件中访问带有 id 的 express 参数
- flutter - RangeError(RangeError(索引):无效值:只有有效值是0:1)
- javascript - 从 Javascript 中的其他两个数组构建一个新数组
- linux - 如何修复 CentOS WebPanel 无法在浏览器中运行但服务已启动并正在运行?
- javascript - 验证括号在字符串中是否正确配对。如果是,打印“有效”,否则打印“无效”(不带引号)
- javascript - 没有问题原因提示的错误 - 'ERROR @wdio/runner: Error'
- python - pip 崩溃:无法从“pip._vendor”导入名称“chardet”
- android - Flutter Build 失败,不在物理设备上运行