[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第93讲。
先来看看题目的要求吧。
时间限制: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分:能正确输出三组数据。
这是一道简单的算法题,涉及的知识点包括循环、条件、列表和枚举算法等。
被0只小鸟看到 被1只小鸟看到 被2只小鸟看到
左边 = p,右边 = p 左边 = q,右边 = q 左边 = p,右边 = q 左边 = q,右边 = p
如果左边 = p,说明左边的小鸟可以看到它; 如果右边 = q,说明右边的小鸟可以看到它;
birds = [p, q, p, p, q, q]
nums = [0, 0, 0, 0, 0, 0]
只看左边的小鸟,如果左边小鸟为p,则将对应的nums[i]加1,表示被左边的小鸟看到了。 只看右边的小鸟,如果右边小鸟为q,则将对应的nums[i]加1,表示被右边的小鸟看到了。
思路有了,接下来,我们就进入具体的编程实现环节。
代码不多,强调3点:
1). 在判断左边小鸟是否为p时,要确保 i - 1不越界,因此要增加一个i > 0的判断,换言之,第1只小鸟是不用看左边的,同理,在向右看时,需要增加i < n - 1的判断;
2). 在列表中统计某个元素出现的次数,直接使用count()函数即可,如果没有出现,结果返回0;
3). 在输出多个值的时候,可以使用sep参数来设置多个值之间的分隔符。
循环语句;
条件语句;
列表;
枚举算法;
这是本次国赛的第二题,分值为40分,代码不多,难度一般。关键点有两个,一是读懂题目的意思,将各种可能出现的情况都列出来,然后进行精简;二是充分利用列表的特点,简化代码。
怎么快速分析题目呢,最好的方法就是画图,可以在草稿纸上画图将各种情况罗列出来,这一步应该不难吧。
然后就是从各种情况中找到真正关键的影响因素,如果单纯的罗列,你会发现,3只小鸟一共有8种站立情况。继续分析,可以发现中间小鸟头朝向哪一边都是一样的,于是就简化成4种情况。进一步分析,只需要看分别看左边和右边的小鸟,这就变成了两种情况。
这就是我们分析问题、思考问题并解决问题的一个简单模型,希望对你有所帮助。
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
需要源码的,可以添加本人微信。
另外,超平老师创建了一个蓝桥杯备考交流群,这是专门为老师和家长打造的免费社群,您可以与来自全国各地的老师、家长共同交流经验,分享学习心得。
超平老师也会给大家带来及时的赛事动态,备考攻略,真题资源分享,帮助各位更好地备考第15届蓝桥杯赛事,力争取得优异的成绩。
扫码或长按加入微信群