学习Python从娃娃抓起!记录下蓝桥杯备考学习过程中的题目,记录每一个瞬间。
附上汇总贴:历年蓝桥杯Python青少组中/高级选拔赛(STEMA)真题解析 | 汇总
【题目描述】
有71个大小相等个格子从左到右排成一排,编号从0到70,其中N个格子有荷叶,初始时青蛙在编号为0的格子。青蛙要按照以下规则,跳到最后一个有荷叶的格子:
1、青蛙每次最少跳1格,最多跳x格;
2、青蛙每次只能调到有荷叶的格子;
3、青蛙不能往回跳。
给定N个有荷叶的格子编号,以及青蛙每次最多可以跳的格子数x,请计算青蛙一共有多少种不同的方式跳到最后一个有荷叶的格子,如果青蛙不能跳到最后一个由荷叶的格子,输出0。
例如:N=4,x=3,4个有荷叶的格子编号依次为1、3、4、6,青蛙每次最多跳3格;
第一种:先跳到编号1的格子,接着跳到编号3的格子,再跳到编号4的格子,最后跳到编号6的格子;
第二种:先跳到编号1个格子,再跳到编号3的格子,最后跳到编号6的格子;
第三种:先跳到编号1的格子,再跳到编号4的格子,最后跳到编号6的格子;
第四种:先跳到编号3的格子,再跳到编号4的格子,最后跳到编号6的格子;
第五种:先跳到编号3的格子,最后跳到编号6的格子。
青蛙一共有5种不同的方式跳到最后一个有荷叶的格子。
【输入】
第一行输入一个整数N( 3 ≤ N ≤ 30 3\le N\le 30 3≤N≤30),表示有荷叶的格子数
第二行按从小到大的方式输入N个互不相同的整数( 1 ≤ 整 数 ≤ 70 1\le 整数\le 70 1≤整数≤70),表示有荷叶的格子编号,整数之间以一个空格隔开
第三行输入一个整数x( 1 ≤ x ≤ 5 1\le x \le 5 1≤x≤5),表示青蛙每次最多可以跳的格子数
【输出】
输出一个整数,表示青蛙一共有多少种不同的方式跳到最后一个有荷叶的格子
【输入样例】
4
1 3 4 6
3
【输出样例】
5
【代码详解】
n = int(input())
ls = [int(i) for i in input().split()]
a = [0 for i in range(70+1)]
a[0] = 1
for i in range(len(ls)):
a[ls[i]] = 1
# print(a)
dp = [0 for i in range(70+1)]
x = int(input())
dp[0] = dp[1] = 1
for i in range(x, ls[n-1]+1):
if a[i]==0:
continue
for j in range(i-x, i):
if a[j]==1:
dp[i] += dp[j]
# print(dp)
print(dp[ls[n-1]])
【运行结果】
4
1 3 4 6
3
5