枚举法教案.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
所谓水仙花数指的是这样一些数:他们的各个位置上的数字的立方的和等于它本身,如153=13+53+33,所以153是一个水仙花数。现在要求编程求100-999之间的水仙花数,并输出。 什么是枚举算法 枚举算法就是按照问题本身的性质,一一列举出该问题所有可能的解,并在逐一列举的过程中,检验每个可能解是否是问题的真正解。若是,我们采纳这个解,否则抛弃它。在列举的过程中,既不能遗漏也不应重复。 例题: 一张单据上有一个5位数的编码,其千位数和百位数已经变得模糊不请。但是知道这个5位数是57或67的倍数。现在要设计一个算法,输出所有满足这些条件的5位数,并统计这样的数的个数。 分析: 首先,千位数和百位数 可以填上00,01,02,……97,98,99;得到10047,10147,……19947。建一个循环变量为j,从0到99的一个循环,每一个可能解n的值为10047+j*100 其次,对每一个n判断是否能被57或67整除。若是,输出一组解,解的个数+1;若不是,舍弃 算法描述 1、计数器c←0 2、j←0 3、判断j100,是转4,否转向 9 4、可能解 n←10047+100*j 5、判断n是否57或67的倍数,是转向6;否转向8 6、计数器c←c+1; 7、输出真正的解n 8、j←j+1;转向 3 9、输出解的个数 C 10、结束 枚举法解题过程 逐一列举可能的解 逐一检验可能的解 例题2: 一张单据上有一个5位数的编码,其千位数和十位数已经变得模糊不请。但是知道这个5位数是57或67的倍数。现在要设计一个算法,输出所有满足这些条件的5位数,并统计它们的个数。 分析: 千位数和十位数上的数字只能是0-9中的一个。 双重循环的构造 1、i ←0 2、判断i=9;是转向3,否则转向7 3、j ←0 4、判断j=9;是转向5,否则转向6 5、j ←j+1; 转向4 6、i ←i+1;转向2 7、结束 思考: 右面的流程图有没有问题 算法描述 1、c ← 0;i ←0 2、判断i=9;是转向 3,否则转向 11 3、j ←0 4、判断j=9;是转向 5,否则转向 10 5、n ←10407+1000*i+10*j 6、判断n是否57或67的倍数,是转向 7;否转向 9 7、计数器 c ←c+1; 8、输出一个真正的解 n 9、j ←j+1;转向 4 10、i ←i+1;转向 2 11、输出解的个数 c 12、结束 例题3 百鸡百钱问题 “鸡翁一值钱5, 鸡母一值钱3, 鸡雏三值钱1” 现有100钱,欲买100只鸡,问:鸡翁、鸡母、鸡雏各买几只? 检验可能的解是否真正的解 判断:5*x+3*y+z/3=100 若是,x,y,z就是一个真正的解 例题4 包装问题: 600个变形金刚,包装的规格为:大盒(8个)、中盒(5个)、小盒(2个);每种规格的盒都不能为空。请设计一个算法,输出所有可能的包装方案。 算法提示 构造一个双重循环,循环变量分别为x(大盒数量)和y(中盒数量)。 判断:Z=(600-8*x-5*y)/2是否是整数; 若是,则x,y,z就是一个包装方案。 关于三重循环 X: 1-74 Y: 1-118 Z: 1-293 * Y N 开始 c ←i % 10 i ←i+1 结束 i=999 Y N 输出 i i ←100 i=a3+b3+c3 b ←i / 10 % 10 a ←i / 100 水仙花数问题: 解题过程: 对于100-999之间的每一个数, 按照水仙花数的条件逐一进行检验,找到一个就输出一个。 No.1 47 j100 Y N 开始 c ←0 j ←j+1 结束 c ←c+1 输出 n n ←10047+j*100 n % 57==0或 n % 67==0 N Y j ←0 输出 j 采用枚举算法的条件 仅当问题的所有可能解不太多的时候,才可以使用枚举法。 枚举法解题的难点: 1、构造循环 2、确定可能的解 No.1 4 7 7 0 4 0 1 7 1 4 0 1 7 2 4 0 1 7 3 4 0 1 7 4 4 0 1 7 5 4 0 1 7 6 4 0 1 7 7 4 0 1 7 8 4 0 1 7 9 4 0 1 i j 7 0 4 9 1 7 1 4 9 1 7 2 4 9 1 7 3 4 9 1 7 4 4 9 1 7 5 4 9 1 7 6 4 9 1 7 7 4 9 1 7 8 4 9 1 7 9 4 9 1 i j i 从0变化到9;j从0变化到9。因此,需要构造一个双重循环。 可能的解 n ←10407+1000*i+10*j i=9 Y N 开始 i ←0 i ←i+1

文档评论(0)

wnqwwy20 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:7014141164000003

1亿VIP精品文档

相关文档