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

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

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())
0 回复 0 转发 0 喜欢 3 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!