公司想做个网站应该怎么做,php做的一个网站,杭州 企业门户网站建设,镇江企业网站设计开发价格[导读]#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后#xff0c;受到了广大老师和家长的好评#xff0c;非常感谢各位的认可和厚爱。作为回馈#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》#xff0c;这是解读系列的第84讲。
逢3必过报数游戏超平老师的Scratch蓝桥杯真题解读系列在推出之后受到了广大老师和家长的好评非常感谢各位的认可和厚爱。作为回馈超平老师计划推出《Python蓝桥杯真题解析100讲》这是解读系列的第84讲。
逢3必过报数游戏本题是2022年4月17日举办的第13届蓝桥杯青少组Python编程省赛真题编程部分第4题13届一共举办了两次省赛这是第一次省赛。题目要求编程计算N个小朋友在玩报数游戏时第一个报错的小朋友的编号。
先来看看题目的要求吧。
一.题目说明
编程实现
N个小朋友围成一圈N ≤ 60)并按照顺序进行编号编号1到N然后从编号为1的小朋友开始持续报数当报到的数字中含3或者数字是3的倍数的小朋友不能报数字而是报“过”例如3 , 6 , 13 , 31这些数字都报“过”。
一次游戏中小朋友们玩的不亦乐乎突然有小朋友发现前边报过的数字中已经有报错的而后边小朋友还在继续报数。请你帮助小朋友找出第一次报错的小朋友是编号几。
例如有3个小朋友编号为1 , 2 , 3。编号1的小朋友报1、编号2的小朋友报2、编号3的小朋友报“过“编号1的小朋友报4编号2的小朋友报5、编号3的小朋友报6、编号1的小朋友报7。此时第一次报错的小朋友为编号3。因为编号3的小朋友应该报“过“时报成了6而6是3的倍数。
输入描述
第一行输入一个正整数N表示小朋友的人数。
第二行输入一组有错的报数序列使用0表示含3或者是3的倍数的数字序列元素之间以一个英文逗隔开。
输出描述
输出第一次报错的小朋友是编号几。
输入样例
3
1,2,0,4,5,6,7
输出样例
3
二.思路分析
这是一道简单的算法题涉及的知识点包括循环、条件、列表和模拟算法等。
报数游戏是大家非常熟悉的场景游戏最大的特点就是首尾相连没有尽头你可以一直报下去。 解决报数游戏问题的典型思路是模拟算法就是通过程序来模拟报数的过程然后根据题目的要求处理好细节。
我们可以使用循环来模拟报数过程循环的次数为报数序列的长度从1开始报数当报到和3有关的数字时将数字设置为0然后继续报数。
在模拟的过程中同时和报数序列进行对比如果二者相同说明报数正确如果不相同则说明报数错误如图 列表的第6项不相等说明处在第6个位置上的小朋友出错了那么这个小朋友的编号是多少呢
这个和小朋友的人数有关系如果小朋友的人数 6那么就是第6个小朋友如果小朋友人数 6呢
这就涉及到周期问题对于周期问题通常需要结合取模运算来处理。
假定当前数字为m一个周期的长度为k其典型的模式如下
m - 1% k 1
之所以要先减1再加1是为了确保临界点的正确性。
以大家最熟悉的星期为例来说 一个星期有7天可以分别使用数字1、2、3、4、5、6、7来表示。
在这个周期问题中k 7当m的取值是1~6之间直接使用m % 7是可以的但是当m 7时m % 7 0这就有点问题了。
对于任何整数k进行取模运算得到的结果一定在 0 ~ k - 1之间如果需要得到 1~k就需要先将数字减1得到余数之后再加1。
思路有了接下来我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析我们编写程序如下 代码不多说明3点
1). 跟3有关的数字有两种情况一是3的倍数用余数来判断二是包含数字3用字符运算in来判断
2). 由于下标i是从0开始的因此小朋友的编号应该是i 1
3). 循环结束i 1就是小朋友的编号但是存在超过n的情况因此需要使用余数运算进行处理。
至此整个程序就全部完成了你可以输入不同的数据来测试效果啦。
四.总结与思考
本题代码在10行左右涉及到的知识点包括 循环语句 条件语句 列表操作 模拟算法
本题代码不多难度中等关键点有两个一是使用模拟算法来模拟报数的过程二是使用余数来处理周期问题。
周期问题在编程中出现的频率是非常高的必须要熟练掌握并做到灵活运用务必要理解上面提到的通用公式
m - 1% k 1
你还有什么好的想法和创意吗也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助别忘了点赞和转发予人玫瑰手有余香
需要源码的可以移步至“超平的编程课”gzh。