穷举法
2023-05-30曹晓敏
岭童小子喜欢编程,为此,他参加了学校的编程社团。每周五下午,喜欢编程的同学们就会聚在社团,一起学习,一起进步。
上个月,岭童小子不论是学习、运动,还是小干部工作,都完成得非常好,荣获了“班级之星”的称号。班主任盛老师许诺,这个星期五,获得“班级之星”的同学可以带一样喜欢的物品来学校。例如,可以带上自己养的小乌龟给同学们看看,或是带上手工作品到班级来展示……岭童小子特别高兴,他想把自己的好朋友——星空带来学校。星期五下午有社团课,他想带着星空去编程社团,让同学们都认识一下。
善解人意的盛老师答应了,但是他们约定,星空不能影响课堂纪律。
岭童小子开心极了。在满满的期待中,星期五终于到了,岭童小子带着星空来到编程社团。社团课还没开始,教室里的同学们围着星空,七嘴八舌地好不热闹。
星空看到同学们这么热情,心里有点得意,想在大家面前露一手。他故作神秘地说:“只要你们回答两个问题,我就能猜出咱们社团有多少人。全体起立!请大家按照1—11循环报数,并告诉我最后一位同学报数是多少。”
大家都乐了,想看看星空到底有什么本事,于是都配合星空,按要求开始报数:1、2、3……最后一位同学的报数为9。
“现在请大家按照1—7循环报数,并告诉我最后一位同学报数是多少。”
同学们再一次按照星空的要求报数:1、2、3……最后一位同学报数为6。
“请看,咱们社团人数为……”星空说出一个数字后,立马赢得了一片掌声。
“星空太厉害了!”同学们都啧啧称赞。一旁的岭童小子也自豪不已,星空真是好样的!
岭童小子心里盘算着:不过,星空到底使用了什么独门秘诀?回头得问问晓敏老师,让我也学学。
晓敏老师:
嘿嘿,星空这次用的是“穷举法”。
第一步,把“9”存放在“1—11循環报数结果”这个变量里,把“6”存放在“1—7循环报数结果”这个变量里。如果有同学回答的数字是“11”或“7”,则这两个变量里存放的数据为0。代码见图1。
为什么要设置为0?同学们自己思考一下。
第二步,寻找符合条件的数字。从数字1开始一一尝试,如果这个数除以11的余数与“1—11循环报数结果”这个变量里的数字相等,且这个数除以7的余数与“1—7循环报数结果”这个变量里的数字相等,那就说明找到了,这个数就是社团总人数。
如果不符合以上条件,则说明这个数不对,把“找数”这个变量里的数字加1,得到新的数字,再根据上述的两个条件来判断。如此重复执行、依次寻找,直到出现符合条件的第一个数字,找数环节就可以结束了。代码见图2。
注意,这个环节需要设置一个“判断”变量来控制执行次数。判断=1,则表示找到了这个数,找数环节结束。如果没有这个判断变量,则会陷入无限循环中。
利用计算机超快的运算速度,将求解对象一一列举,逐一验证结果是否满足给定条件,穷举完所有对象,问题就会得以解决,这种方法叫“穷举法”。
只要时间足够,穷举法能够得出所有的正确答案。所以,在运用穷举法解决问题时,求解对象应该是有限的,并且有明显的穷举范围。
程序作品展示:
扫描下方小程序码,看看长沙市芙蓉区马坡岭小学的优秀作品吧!
曹晓敏:湖南省特级教师,湖南省优秀科技辅导员,长沙市首批卓越教师,长沙市骨干教师,长沙市芙蓉区马坡岭小学信息技术教师。