题目
X 星球的盛大节日为增加气氛,用 30台机光器一字排开,向太空中打出光柱。安装调试的时候才发现,不知什么原因,相邻的两台激光器不能同时打开!国王很想知道,在目前这种 bug 存在的情况下,一共能打出多少种激光效果?显然,如果只有 3 台机器,一共可以成5种样式,即:全都关上(sorry,此时无声胜有声,这也算一种);开一台,共3种:开两台,只 1种。30 台就不好算了,国王只好请你帮忙了。要求输出一个整数,表示 30 台激光器能形成的样式种数。
分析
我们可以简单列举一下前几台机器是什么情况,然后我们根据前几台的情况找规律。1台:2种情况,2台:3种情况。3台:5种情况。4台:8种情况...... 由此可见,后一台的情况种数是前两种情况之和,类似于斐波那契数列。解决这种问题我们选择使用列表来接收不同台数机光器的情况种数。即num=[0,2,3]+[0]*28,这样定义的好处是num[n]就是n台的情况种数,可以算出所有的结果,这一题我们只算最后一个结果。
代码
num=[0,2,3]+[0]*28
for i in range(3,31):
num[i]=num[i-2]+num[i-1]
print(num[-1])