[蓝桥杯python] B君的寄望:B君在执行爬山计划的时候迷了路,但他身上有个哨子,而哨声分为长和短,中间要有间隔,短音1s,长音2s,间隔1s,给总时间,问有几种吹法,最后一个哨声要刚好在第n秒

[蓝桥杯python] B君的寄望

问题描述

1、资源限制

2、输入格式

3、输出格式

4、样式输入及输出

5、代码及解析

大功告成!编写不易,大家成功后点个关注or赞谢谢~~


问题描述

  B君在执行爬山计划的时候迷了路,但他身上有个哨子,而哨声分为长和短,中间要有间隔,短音1s,长音2s,间隔1s,给你总时间,问有几种吹法,最后一个哨声要刚好在第n秒时结束。


1、资源限制

资源限制

时间限制:1.0s   内存限制:256.0MB

2、输入格式

每组测资只有一个整数,1~1000

3、输出格式

输出一个整数,代表哨声吹法种数

4、样式输入及输出

样例输入

100

样例输出

888855064897

5、代码及解析

具体解析请大家自己看一下代码中的备注,在此不多做解释。

注意:代码里面很冗长,有些步骤可能没有必要,但是我不知道怎么优化。

           如果大家想到了解决方法请在评论区说下,大家一起努力

n = int(input())
#为了方便计算,先将前3秒的方法数输出.我暂时没有想到更好的方法
#如果有的话希望大家评论区说一下
if n < 4:
    if n == 2:
        print(0)
    if n == 1:
        print(1)
    if n == 3:
        print(2)
else:
    rect = [[0,0] for _ in range(0,n)]
    #此处先将前3s的方法数填进去
    rect[0][0] = 1
    rect[0][1] = 0
    rect[1][0] = 0
    rect[1][1] = 1
    rect[2][0] = 1
    rect[2][1] = 0
    #此处我将秒数作为行,只有两列
    #第一列是以1s结尾,第二列是以2s结尾的情况
    #推算可以看出,第n秒以短笛结尾的情况=第n-2秒的两种情况相加
    #同理,第n秒以长笛结尾的情况=第n-3秒的两种情况相加
    for i in range(3,n):
        rect[i][0] = rect[i - 2][0] + rect[i - 2][1]
        rect[i][1] = rect[i - 3][0] + rect[i - 3][1]
    #最后输出最后1s两种情况相加,即为最终的答案
    print(rect[-1][-1]+rect[-1][-2])

结果:

 

 但是可以看出,代码还是有缺陷,但是可以解决问题

希望有大神可以在评论区提提优化意见,大家一起努力 !!!


自己写的所以有点复杂,但是至少能完成嘿嘿。如果各位有优化欢迎评论区讨论!!

大功告成!编写不易,大家成功后点个关注or赞谢谢~~


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Callme_TeacherPi℡

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值