电线杆上的小鸟-第13届蓝桥杯国赛Python真题解析

文摘   教育   2024-07-02 20:45   湖北  

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第93讲。

电线杆上的小鸟,本题是2022年5月29日举办的第13届蓝桥杯青少组Python编程国赛真题编程部分第2题。题目要求编程计算在一根电线上的N只小鸟,分别为有几只小鸟被0只、1只、2只小鸟看到。

先来看看题目的要求吧。

01
题目说明 

时间限制:3000MS

内存限制:589824K8

编程实现:

在一根电线上落有N只小鸟,有的小鸟头向左看,有的小鸟头向右看,而且每只小鸟只能看到它视线前的那一只小鸟。

给定N只小鸟头的朝向,头向左的小鸟使用小写字母"q"表示,头向右看的小鸟使用小写字母"p"表示,请你计算出N只小鸟中有多少只小鸟被0只小鸟看到,多少只小鸟被1只小鸟看到,多少只小鸟被2只小鸟看到。

例如:N = 6,6只小鸟头的朝向分别为p,q,p,p,q,q

如图:有2只小鸟被0只小鸟看到(第3只和第6只);有2只小鸟被1只小鸟看到(第1只和第2只);有2只小鸟同时被2只小鸟看到(第4只和第5只),则输出三个数字分别为2,2,2。

输入描述:

第一行输入一个正整数N(3 ≤ N ≤ 1000),表示有N只小鸟落在电线杆上

第二行输入N个字符,字符只能是"q"和"p","q"表示小鸟头向左看,"p"表示小鸟头向右看,字符之间以一个英文逗号隔开

输出描述:

一行输出三个整数,分别为有几只小鸟被0只小鸟看到;有几只小鸟被1只小鸟看到;有几只小鸟被2只小鸟看到;整数之间以一个英文逗号隔开

样例输入:

6

p, q, p, p, q, q

样例输出:

2, 2, 2

评分标准:

  • 10分:能正确输出一组数据;

  • 10分:能正确输出两组数据;

  • 20分:能正确输出三组数据。
02
思路分析 

这是一道简单的算法题,涉及的知识点包括循环、条件、列表和枚举算法等。

乍一看,题目有点难度,但如果你仔细分析一下,其实挺简单的。
任何一只小鸟,它都处于如下三种情况中的一种:
  • 被0只小鸟看到
  • 被1只小鸟看到
  • 被2只小鸟看到
为了让你更好理解这一点,我们通过画图来说明,如下:

相信你已经看到了,中间的小鸟是向左还是向右都是一样的。所以一共有4种组合,如下:
  • 左边 = p,右边 = p
  • 左边 = q,右边 = q
  • 左边 = p,右边 = q
  • 左边 = q,右边 = p
其中,左边 = p,右边 = q时,可以同时被2只小鸟看到,左边 = q,右边 = p时,同时被0只小鸟看到,其它两种情况则同时被1只小鸟看到。
实际上,我们还可以进一步简化,只看左边或者右边,如下:
  • 如果左边 = p,说明左边的小鸟可以看到它;
  • 如果右边 = q,说明右边的小鸟可以看到它;
具体到编程实现方面,先将输入的字符保存到列表中,如下:
birds = [p, q, p, p, q, q]
然后可以使用一个列表来表示每一只被几只小鸟看到,默认值为0,如下:
nums = [000000]
接下来直接遍历birds列表,考虑两种情况,如下:
  • 只看左边的小鸟,如果左边小鸟为p,则将对应的nums[i]加1,表示被左边的小鸟看到了。
  • 只看右边的小鸟,如果右边小鸟为q,则将对应的nums[i]加1,表示被右边的小鸟看到了。
最后,在nums列表中统计0、1和2的数量,就分别表示被0、1、2只小鸟看到的小鸟数量了

思路有了,接下来,我们就进入具体的编程实现环节

03
编程实现 
根据上面的思路分析,我们编写程序如下:

代码不多,强调3点:

1). 在判断左边小鸟是否为p时,要确保 i - 1不越界,因此要增加一个i > 0的判断,换言之,第1只小鸟是不用看左边的,同理,在向右看时,需要增加i < n - 1的判断;

2). 在列表中统计某个元素出现的次数,直接使用count()函数即可,如果没有出现,结果返回0;

3). 在输出多个值的时候,可以使用sep参数来设置多个值之间的分隔符。

至此,整个程序就全部完成了,你可以输入不同的数据来测试效果啦。
04
总结与思考 
本题代码在12行左右,涉及到的知识点包括:
  • 循环语句;

  • 条件语句;

  • 列表;

  • 枚举算法;

这是本次国赛的第二题,分值为40分,代码不多,难度一般。关键点有两个,一是读懂题目的意思,将各种可能出现的情况都列出来,然后进行精简;二是充分利用列表的特点,简化代码。

怎么快速分析题目呢,最好的方法就是画图,可以在草稿纸上画图将各种情况罗列出来,这一步应该不难吧。

然后就是从各种情况中找到真正关键的影响因素,如果单纯的罗列,你会发现,3只小鸟一共有8种站立情况。继续分析,可以发现中间小鸟头朝向哪一边都是一样的,于是就简化成4种情况。进一步分析,只需要看分别看左边和右边的小鸟,这就变成了两种情况。

这就是我们分析问题、思考问题并解决问题的一个简单模型,希望对你有所帮助。

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要源码的,可以添加本人微信

另外,超平老师创建了一个蓝桥杯备考交流群,这是专门为老师和家长打造的免费社群,您可以与来自全国各地的老师、家长共同交流经验,分享学习心得。

超平老师也会给大家带来及时的赛事动态,备考攻略,真题资源分享,帮助各位更好备考第15届蓝桥杯赛事,力争取得优异的成绩。

扫码或长按加入微信群

超平的编程课
青少儿编程教育专家,中国人民大学硕士,大学讲师,曾任知名上市机构金牌讲师,16年编程教研经验。大耳猴少儿编程联合创始人,致力于通过编程教育提升孩子的逻辑思维、数学思维和计算思维,迎接AI时代。
 最新文章