[蓝桥杯python] B君的寄望
问题描述
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])
结果:
但是可以看出,代码还是有缺陷,但是可以解决问题
希望有大神可以在评论区提提优化意见,大家一起努力 !!!
自己写的所以有点复杂,但是至少能完成嘿嘿。如果各位有优化欢迎评论区讨论!!