第十三届蓝桥杯国赛Python 大学C组

这篇博客探讨了若干算法问题的解题思路,包括斐波那契数列中7的出现次数、最大公约数的计算以及模拟交通信号的 bfs 解决方案。博主通过暴力和周期性分析解决了斐波那契问题,并讨论了如何判断数组是否存在解转化为1的变换。此外,还涉及到了最大公约数的快速计算以及交通信号灯状态变化的路径查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非题解 仅仅是自己的个人思路!!!

希望能为你提供一些思路,目前不确定正确与否,大家有更好好的思路也可以一起讨论~~~

目录

A:斐波那契与7

B:小蓝做实验

C:取模

D:内存空间

E:斐波那契数组

F: 最大公约数

G: 交通信号

H: 点亮

 I: owo

J: 宝石收集


A:斐波那契与7

解题思路:

  • 当前项个位 只与前两项的个位有关      (十位百位... 相加 影响不到个位)
  • 那么当相邻两项的个位在之前出现过时  即又会反复1 1 2 3 5... 即会周期循环下去

思考:要想后面项的个位又重复出现3 5 那么前面两项 必然是1 2 而1 2 两项前面又必然是 0 1 

所以可以发现 0 1 1 2 3 5 是绑定死的 所以可以判断下一次出现1 1 即为下一次周期的开始

#ans:26960268160

#暴力:返回1-n项之间的数列7的个数
def fun1(n): 
    res = 0
    a,b = 1,1
    for i in range(3,n + 1):
        if (a + b) % 10 == 7:res += 1
        a,b = b,(a + b) % 10
    return res

#利用周期性:返回1-n项之间的数列7的个数
def fun2(n):
    res = 0
    res = (n // 60) * 8 + fun1(n % 60)
    return res

if __name__ == "__main__":
    n = int(input().strip())
    print("fun2",fun2(n))
##    以下是我找周期和计算该周期里7的个数的过程
##    Set,a,b,t = ['1 1'],1,1,0
##    while True:
##        s = str(b % 10) + ' ' + str((a + b) % 10)
##        if s in Set:break
##        else:Set.append(s)
##        a,b = b,a + b
##        if b % 10 == 7:t += 1
##    print(t,len(Set))
##    print(fun1(n % 61))

B:小蓝做实验

解题思路

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值