栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[蓝桥杯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赞谢谢~~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/753924.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号