枚举算法
练习3: 练习 :
• 1. 2. 包装600个变形金刚,要求是: 个变形金刚,要求是: 包装 个变形金刚 包装的规则分别是:小盒每盒 个 大盒每盒15个 包装的规则分别是:小盒每盒12个,大盒每盒 个。 每种规格的盒数都不能为0 每种规格的盒数都不能为
请设计一个算法,输出所有可能的包装方案。 请设计一个算法,输出所有可能的包装方案。
算法应用
完整算法的三大部分组成: 完整算法的三大部分组成: 1. 输入部分 2. 处理部分 3. 输出部分
任何问题的算法流程图框架: 任何问题的算法流程图框架:
开始 输入
处理
输出
结束
什么是枚举算法
• 有一类问题可以采用一种盲目的搜索方法, 有一类问题可以采用一种盲目的搜索方法, 在搜索结果的过程中, 在搜索结果的过程中,把各种可能的情况都 考虑到, 对所得的结果逐一进行判断, 考虑到,并对所得的结果逐一进行判断,过 滤掉那些不符合要求的,保留那些符合要求 滤掉那些不符合要求的, 这种方法叫枚举算法。 的,这种方法叫枚举算法。 • 并不是所有的问题都可以使用枚举算法来求 解,只有当问题的所有可能解的个数不太多 时,并在可以接受的时间内得到问题的所有 解,才有可能使用枚举算法 。
枚举算法的结构流程图框架: 枚举算法的结构流程图框架:
开始 输入 循环结构
处理 部分 作用: 作用:逐一列举可能 解的范围
分支结构
输出 结束
作用: 作用:逐一检验可能 解的是否是真解
例题1: 例题 :
• 在1~2008这些自然数中,找出所有 这些自然数中, 这些自然数中 是37倍数的自然数。 倍数的自然数。 倍数的自然数
例题3: 例题 :
• 1000以内素数的推算 以内素数的推算
素数,也叫质数。判断一个数是否为素数,可以使用 素数的定义。通常我们称自然数n是一个素数,是指只 有1和n本身才能整除它(1不是素数,2是最小的素 数),即一个素数除了它本身以外,不可能分解为其 他自然数的乘积。
流程图
练习1: 练习 :
枚举算法的解题过程分两步
• 逐一列举可能的解的范围。 逐一列举可能的解的范围。 这个过程用循环结构 循环结构实现 这个过程用循环结构实现 • 并对每一个列举可能的解进行检验,判断是否为真正 并对每一个列举可能的解进行检验, 的解 。 这个过程用选择结构实现 这个过程用选择结构实现 选择结构 • 枚举算法 循环结构 选择结构 枚举算法=循环结构 循环结构+选择结构 • 循环结构内嵌套选择结构
流程图
例题2: 例题 :
• 一份单据中被涂抹的数字的推算。 一份单据中被涂抹的数字的推算。
一张单据上有一个5位数字组成的编号,其千位数和百 位数处已经变得模糊不清,如下所示。但是知道这个5 位数是57或67的倍数。现要求设计一个算法,输出所 有满足这些条件的5位数,并统计这样的数的个数。
流程图
• 用10元和 元两种纸币组成 元,共有几种 元和50元两种纸币组成 元和 元两种纸币组成240元 组合方式? 组合方式?试用枚举算法列出所有不同的取 法和种数。 法和种数。
练习2: 练习 :
• 现在,在一个直角三角形中,三条边a、b、c的长 现在,在一个直角三角形中,三条边 、 、 的长 度都是整数,若一条直角边a的长度已知 斜边c的 的长度已知, 度都是整数,若一条直角边 的长度已知,斜边 的 长度不超过给定的整数值maxc,试设计算法,找 长度不超过给定的整数值 ,试设计算法, 出满足条件的所有直角三角形。 出满足条件的所有直角三角形。