十二届蓝桥杯python青少年组第五题——密室逃脱

密室逃脱
提示信息:
有一个密室逃脱游戏,有100间密室连在一排。密室编号是从1开始连续排列一直排到第100间密室,如下图:

游戏规则:
玩家初始位置在1号密室;

每次玩家可以进入右边的一个密室,也可以跳过一个密室进入下个密室(如:当玩家当前在3号密室,他可以进入4号密室也可以进入5号密室);

有毒气的密室不能进入需要避开。

编程实现:
给定三个正整数X,Y,M(1<X<Y<M≤100),表示三个密室编号。X号密室和Y号密室有毒气泄漏,不能进入,玩家需要进入到M号密室。按照游戏规则进入M号密室有多少种路线方案。

例如:X=2,Y=4,M=7,2号和4号有毒气泄露,避开2号和4号毒气密室,进入7号密室有2种路线方案,分别是1->3->5->6->7路线和1->3->5->7路线。

输入描述
输入三个正整数X,Y,M(1<X<Y≤M),并以英文逗号隔开

输出描述
输出从1号密室开始避开X、Y号毒气密室,进入M号密室有多少种路线方案?

画树状图出来会看的比较清晰,考察的是斐波那契数列的掌握情况。
 

解:

def fib(x=2,y=4,n=7):#建议做题的时候画一个树状图方便理解
    a=0#a表示的是,出口为n时(不为0),包含的路径数
    b=1#仅是用于迭代,个人认为无实际的意义
    for i in range(n):#,i的实际意义等于出口n,i=0时,则代表出口n=1。
        if i in [x-1,y-1]:#因为是从0开始,所以需要-1。表达意思是,当出口为有毒的房间时,删除路径。从下一个房间开始重新计算
            a=0
            b=1
        else:
            a,b=b,a+b#斐波那契数列
            #print(a,b)
    print(a)
if __name__=='__main__':
    fib()
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值