测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A40933. 有一个密室逃脱游戏,有100间密室连在一排。密室编号是从1开始连续排列一直排到第100间密室,如下图:游戏规则:1.玩家初始位置在1号密室;2.每次玩家可以进入右边的一个密室,也可以跳过一个密室进入下个密室(如:当玩家当前在3号密室,他可以进入4号密室也可以进入5号密室);3.有毒气的密室不能进入需要避开。编程实现:给定三个正整数X,Y,M(X<Y<M≤100),表示三个密室编号。X号密室和Y号…

填空题 较难

题目描述

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

游戏规则:

1.玩家初始位置在1号密室;

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

室,他可以进入4号密室也可以进入5号密室);

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

编程实现:

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

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

输入描述: 

输入三个正整数X,Y,M(X<Y<M),X和Y表示有毒气密室编号,M表示需要进入的密室编号,且三个正整数之间以英文逗号隔开

输出描述: 

输出进入M号密室有多少种路线方案

样例输入: 

2,4,7

样例输出:

 2

参考答案

import time all_solutions = [] def printSteps(preSteps: str, leftSteps: int): # 用递归原理来找出所有路径存入变量all_solutions。 global all_solutions if(leftSteps < 0): print("台阶数不能小于0") if(leftSteps == 1): # print(preSteps + " 1") all_solutions.append(preSteps + " 1") return elif(leftSteps == 0): all_solutions.append(preSteps) # print(preSteps) return for i in range(1, 3):# 每次可以走1,走2步. printSteps(preSteps + " " + str(i), leftSteps - i) def all_path(all_solutions: list) -> list: steps = [] for i in all_solutions: steps.append(list(map(int, i.split()))) # 生成列表并将数据类型转成int。 all_result = [] for i in steps: a = [1] temp = 1 for j in i: temp += j a.append(temp) all_result.append(a) return all_result def mishi_path(X: int, Y: int, M=5) -> list: # 递归解法算出所有走法,返回到所有all_solutions(str list) printSteps(preSteps='', leftSteps=M-1) l = all_path(all_solutions) # 从1->M 的所有路径。 result = [] for i in l: if (X in i) or (Y in i): continue else: result.append(i) return result if __name__ == "__main__": t1 = time.time() result = mishi_path(X=2, Y=4, M=7) for i in range(len(result)): print(f"第{i+1}: {result[i]}") print(f"共有{len(result)}种路径。") t2 = time.time() print(t2-t1)
上一题 下一题