1、学习内容枚举法的程序实现枚举法解决问题的一般过程探 索 “韩信点兵”的故事,同学们知道吗?韩信是怎么快速算出士兵的总人数的?探 索建 构 “韩信点兵”故事是一个有趣的猜数游戏。它有很多种求解算法,例如枚举法。一、问题描述 相传有一次,韩信带领1500名士兵去打仗。一场战役过后,士兵死伤四五百人。他命令剩下的士兵中3个人一排,发现多出来2个人;然后又命令5个人一排,多出来3个人;最后命令7个人一排,多出来2个人。韩信马上算出人数:我军还有1073名勇士!二、抽象与建模 可以用数的除法运算来表示韩信点兵的过程。二、抽象与建模 x=1000时,是否满足条件“x除以3余数为2、x除以5余数为3、x除以
2、7余数为2”?x=1001时,是否满足条件“x除以3余数为2、x除以5余数为3、x除以7余数为2”?.x=1100时,是否满足条件“x除以3余数为2、x除以5余数为3、除以7余数为2”?三、算法设计 根据刚才讲到的抽象与建模,可以用枚举法来解决“韩信点兵”的问题。x依次取1000-1100范围内的值,采用循环结构;判断是否同时满足条件“x除以3余数为2,x除以5余数为3,x除以7余数为2”,采用分支结构。三、算法设计四、算法的程序实现 在 Python 中,“%”是求余数的运算符,x%y表达式是“用 x除以 y,取余数”,如“5%2”是 1。因此,条件“x 除 3 余 2?”表示为:x%3=2
3、。用“and”逻辑运算符来判断多个条件是否同时被满足,即 x and y 表达式的功能是“当 x 和 y 的值均为真时,表达式的值为真”。因此,“x 除 3 余 2 且 x 除 5 余 3 且 x 除 7 余 2?”就可用x%3=2 and x%5=3 and x%7=2 来表示。四、算法的程序实现 用 Python 语言编写上述算法:练 习 假如将“韩信点兵”的问题修改为:韩信带领1500名士兵去打仗,一场战役过后,士兵死伤100多人。他命令剩下的士兵3个人一排,发现多出来1个人;然后又命令5个人一排,多出来4个人;最后命令7个人一排,多出来3个人。问:剩下的士兵一共多少人?请同学们用枚举算法来解决上述问题。