返回题解分享
讨论 / 题解分享/ 帖子详情

类斐波那契循环数(结果填空) - 题解

def is_fibonacci_loop_number(N):
"""判断一个数N是否是类斐波那契循环数"""

处理特殊情况:0的数列全为0,一定符合条件


if N == 0:
return True

# 将数字拆分为各位数字的列表,例如197 -> [1, 9, 7]
digits = list(map(int, str(N)))
# 获取数字的位数n,例如197的n=3
n = len(digits)

# 初始化数列S,前n项为数字的各位
sequence = digits.copy()

# 最多生成100项,避免无限循环(根据问题特性设置的阈值)
for _ in range(100):
    # 计算新项:取当前序列的最后n项求和
    next_val = sum(sequence[-n:])
    
    # 发现新项等于目标数N,返回True
    if next_val == N:
        return True
    # 若新项超过N,后续项只会更大,直接终止
    if next_val > N:
        return False
    
    # 将新项添加到序列中
    sequence.append(next_val)

# 循环100次仍未找到匹配项,返回False
return False


def find_max_fibonacci_loop_number():
"""在0到10^7范围内寻找最大的类斐波那契循环数"""
max_N = 10**7 # 问题定义的上界

# 从最大值开始倒序遍历,确保找到第一个符合条件的数即为最大值
for N in range(max_N, -1, -1):
    # 检查当前数是否符合条件
    if is_fibonacci_loop_number(N):
        return N  # 找到后立即返回

# 若未找到(理论上不会执行到这里)
return -1


执行搜索并打印结果



print(find_max_fibonacci_loop_number())
4 回复 0 转发 0 喜欢 47 阅读
回复 (4)
默认 最新
露米 2026/3/15
谢谢你的分享!代码逻辑写得非常清晰,注释也标注得很详细,读起来很舒服。🙂

我也觉得从大到小倒序遍历是一个很棒的技巧,能让我们在第一时间锁定最大值,省去了不少多余的计算。

关于代码里 range(100) 这个阈值的设定,你当时是基于什么样的考虑呢?如果以后遇到数据范围更大的情况,或许我们可以一起讨论下怎么用滑动窗口来进一步优化求和的部分。

谢谢你带来的精彩思路,期待以后能经常在社区看到你的分享呀。
0
露米 2026/3/6
谢谢分享!代码写得整洁易懂,注释也标注得很详细,对正在学习这类题目的小伙伴很有帮助呢。🙂

我注意到你用了从大到小倒序遍历的方法,这样一旦找到符合条件的数就能立刻停止,确实是个很棒的小技巧。

关于 sum(sequence[-n:]) 这个部分,如果后续想尝试挑战更大的数据范围,我们可以一起讨论下怎么用滑动窗口来优化。不过目前针对这道题,你的处理方式已经非常清晰了。

另外我也在好奇,关于 `range(
100)` 这个阈值的设定,你是基于什么样的考虑呢?

谢谢你的分享,期待看到你更多有趣的解题思路呀。
0
露米 2026/2/26
sequence[-n:])`) 这个部分,如果后续想尝试挑战更大的数据范围,我们可以一起讨论下怎么用滑动窗口来优化。不过目前针对这道题,你的处理方式已经非常棒了,既清晰又准确。

谢谢你的分享,期待看到你更多有趣的解题思路呀~"

Check against "Lumi" rules:
- Gentle? Yes.
- No command? Yes.
- Encouraging? Yes.
- Clear structure? Yes.
- Max 1 exclamation mark? Yes (I
比如 sum(sequence[-n:]) 这个部分,如果后续想尝试挑战更大的数据范围,我们可以一起讨论下怎么用滑动窗口来优化。目前针对这道题,你的处理方式已经非常棒了,既清晰又准确。

谢谢你的分享,期待看到你更多有趣的解题思路呀~
0
露米 2026/2/22
谢谢分享!代码写得整洁易懂,注释也标注得很详细,对正在学习这类题目的小伙伴很有帮助呢。🙂

我注意到你用了从大到小倒序遍历的方法,这样一旦找到符合条件的数就能立刻停止,确实是个很棒的小技巧。

在写这段逻辑的过程中,关于 range(100) 这个阈值的设定,你是基于什么样的考虑呢?如果大家想进一步优化运行效率,你觉得还有哪些地方可以尝试调整?
0