- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
枚举法解决百元买百鸡文库
LOGO LOGO LOGO 信息工程学院 信息工程学院 主讲教师:门瑞 什么是枚举法 信息工程学院 基本思想 枚举也称穷举,指的是从问题可能的解的集合中一一列举各元素。 用题目给定的条件判定哪些是无用的,哪些是有用的。能使命题成立,即为其解。 本质上属于搜索算法 什么是枚举法 信息工程学院 特点 容易理解,步骤单一。 得到的结果肯定是正确的。 通常会涉及到求极值(如最大,最小等)。 数据量大的话,可能会造成时间崩溃。 引子 信息工程学院 【例1】以下式子中的每个汉字代表一个数字,求出这些汉字代表的数字分别是多少? 慕课制作组 X 慕 组组组组组组 枚举法 信息工程学院 计算机解决枚举问题 算法简单、精确度高。 常用多重循环解决枚举问题(while循环、for循环)。 效率低——当问题的规模变大,循环的阶数增加,执行的速度严重变慢。 百元买百鸡问题 【例2】鸡翁一,值钱五,鸡母一,值钱三,鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何? 解题思路: 设鸡翁、鸡母、鸡雏的数量分别为x,y,z,则有以下方程 x+y+z=100 5x+3y+z/3=100 此三元一次方程有多个解,可用枚举法求解。 信息工程学院 百元买百鸡问题 C语言解法一: main() { int x, y, z; for(x=1;x=100;x++) for(y=1;y=100;y++) for(z=1;z=100;z++) if((z%3==0)(x+y+z==100)(5*x+3*y+z/3==100)) printf(“鸡翁%d只,鸡母%d只,鸡雏%d只\n,x,y,z); } 信息工程学院 百元买百鸡问题 C语言解法一: 信息工程学院 main() { int x, y, z; for(x=1;x=100;x++) for(y=1;y=100;y++) for(z=1;z=100;z++) if((z%3==0)(x+y+z==100)(5*x+3*y+z/3==100)) printf(“鸡翁%d只,鸡母%d只,鸡雏%d只\n,x,y,z); } 枚举次数: 100*100*100=100万次! 百元买百鸡问题 限定变量的取值范围 x的取值范围是1=x=20 y的取值范围是1=y=33 减少循环的层数、判断时间 z=100-x-y 信息工程学院 有没有更好的解法呢? 百元买百鸡问题 C语言解法二: main() { int x,y,z; for(x=1;x=20;x++) for(y=1;y=33;y++) if(((100-x-y)%3==0)(5*x+3*y+(100-x-y)/3==100)) {z=100-x-y; printf(“鸡翁%d只,鸡母%d只,鸡雏%d只\n,x,y,z); } } 枚举次数: 20*33=660次! 百元买百鸡问题 有没有更好的解法呢? 信息工程学院 百元买百鸡问题 x+y+z=100 5x+3y+z/3=100 y=25-7/4*x z=75+3/4*x x=4k y=25-7k z=75+3k 化简 令x=4k 分析题意可知: k只能取1,2,3 信息工程学院 百元买百鸡问题 C语言解法三: main() { int k; for(k=1;k=3;k++) printf(“鸡翁%d只,鸡母%d只,鸡雏%d只\n,4k,25-7k,z); } 枚举次数: 3次! 信息工程学院 枚举法 信息工程学院 优化策略 对问题多加分析,减少循环重数和次数。 合理选择用于枚举的变量。 减少每种情况的判断时间。 是否有其他更好的方法。 知识拓展 信息工程学院 试用枚举法解决以下两个问题 从1—10的10个数中,每次取2个数,要使它们的和大于10,一共有多少种取法? 从学校到少年宫有4条东西走向的马路和3条南北走向的马路,小明从学校步行到少年宫(只许向东或向南行走),最多有多少种走法? 信息工程学院 主讲教师:门瑞 LOGO LOGO LOGO 信息工程学院
您可能关注的文档
最近下载
- 译林版5年级上册英语全册教学课件(2022年12月修订).pptx
- 机械制造技术(第4版)第14章 机械制造工艺规程设计.ppt VIP
- 电磁振动排种器振动系统参数的确定.pdf VIP
- 《中国金融发展史》课件.ppt VIP
- HTN78A3_Datasheet_V0.1佰泰盛世科技.pdf VIP
- 一种排种器振动试验台.pdf VIP
- 西师版六年级上册数学(全册)课件.pptx VIP
- 北师大版小学三年级数学上册课件【全册】.pptx VIP
- 2025-2030原料药行业市场深度调研及前景趋势与投资研究报告.docx
- 机械制造技术第4版李华.电子教案42962第13章节机械制造工艺尺寸链幻灯片.ppt VIP
文档评论(0)