摘苹果,本题是2022年4月23日举办的第13届蓝桥杯青少组Python编程省赛真题编程部分第3题,13届一共举办了两次省赛,这是第二次省赛。题目要求对于给定小青伸手高度N及每个苹果离地高度,请你编程帮助小青计算出最多能摘到多少个苹果。
先来看看题目的要求吧。
时间限制:3000MS
内存限制:589824K8
编程实现:
小青带着一根长为80厘米的竹竿去摘苹果,当伸手碰不到的苹果会借助竹竿摘苹果(竹竿碰到苹果就算摘下)。在给出小青伸手的高度N及每个苹果离地面的高度,请你帮助小青计算出最多能摘到多少个苹果。
例如:N = 120,苹果高度分别为130,220,153,200,最多可摘到3个苹果,高度为220的苹果即使用竹竿也摘不到。
输入描述:
第一行输入一个正整数N(120 ≤ N ≤ 200),表示小青伸手高度(单位:厘米)
第二行输入多个正整数,表示每个苹果距离地面的高度,正整数之间以一个英文逗号隔开(单位:厘米)
输出描述:
输出一个整数,表示小青最多可以摘到的苹果数
样例输入:
120
130,220,153,200
样例输出:
3
评分标准:
10分:能正确输出一组数据;
10分:能正确输出两组数据;
15分:能正确输出三组数据;
15分:能正确输出四组数据。
这是一道简单的计算题,涉及的知识点包括循环、条件、列表和枚举算法等。
枚举算法 列表推导式
n + 80 >= 苹果高度
[expression for item in iterable if condition]
nums = [1, 2, 3, 4, 5]
res = [n ** 2 for n in nums if n > 2]
print(res) # 输出 [9, 16, 25]
思路有了,接下来,我们就进入具体的编程实现环节。
枚举算法
列表推导式
1. 枚举算法
根据前面的思路分析,我们编写代码如下:
代码不多,强调两点:
1). 在获取苹果高度的时候,使用了map()函数,它接受两个参数,第一个参数是函数,第二个参数是可迭代对象(如列表、元组、字符串等),结果返回新的迭代器对象,只不过每个元素都被函数处理过,然后再使用list()函数转成列表;
2). 在遍历apples列表时,直接获取列表中的元素,没有使用下标,这样代码更简单。
2. 列表推导式
使用列表推导式,对代码进行简化,如下:
1). 获取高度列表的时候,使用了列表推导式;
2). 使用带条件的列表推导式,对apples列表进行过滤,将可以摘到的苹果保存到res列表中,res列表的长度就是可以摘到的苹果数量。
循环语句;
条件语句;
遍历列表;
列表推导式;
本题分值为50分,代码不多,难度一般。关键点在于理解题目的意思,找出判断条件,然后使用枚举算法逐一处理。
枚举算法非常简单,它是所有算法的基础,大部分编程问题,都可以用枚举算法来解决。
但是,我们不能仅仅满足于枚举算法,枚举虽好,但效率不高。我们得想办法提高程序的效率, 于是就出现了各种不同的算法,比如分治、二分、回溯和动态规划等。
大家可能不知道的是,在Python编程中,列表推导式比传统的循环方法更为高效。这是因为列表推导式在底层进行了优化,可以更快速地执行操作。
除此之外,列表推导式还有如下几个特点:
1. 简洁性:
列表推导式简化了对列表元素的处理过程。通过一行简洁的代码,可以快速创建新的列表,并对元素进行转换、筛选或组合操作。
2. 可读性:
使用列表推导式可以使代码更具可读性。它们精炼地表达了对列表元素的处理逻辑,使代码更加清晰和易于理解。
3. 灵活性:
列表推导式可以包含条件表达式,从而允许根据特定条件筛选元素,使得代码更为灵活。
4. 功能丰富:
除了简单的列表生成外,列表推导式还支持嵌套、多重循环等复杂操作,使得其在处理各种数据结构时非常有用。
总之,列表推导式是一种强大而优雅的工具,可以帮助简化代码、提高可读性,并提高代码执行效率。它是一种非常实用的编程技巧,我们必须要熟练掌握。
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
需要源码的,可以添加本人微信。
另外,超平老师创建了一个蓝桥杯备考交流群,这是专门为老师和家长打造的免费社群,您可以与来自全国各地的老师、家长共同交流经验,分享学习心得。
超平老师也会给大家带来及时的赛事动态,备考攻略,真题资源分享,帮助各位更好地备考第15届蓝桥杯赛事,力争取得优异的成绩。
扫码或长按加入微信群