枚举法解决百元买百鸡
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
信息工程学院 LOGO
百元买百பைடு நூலகம்问题
有没有更 好的解法 呢?
限定变量的取值范围
x的取值范围是1<=x<=20
y的取值范围是1<=y<=33
减少循环的层数、判断时间
z=100-x-y
信息工程学院 LOGO
百元买百鸡问题
C语言解法二:
main() {
int x,y,z;
for(x=1;x<=20;x++) for(y=1;y<=33;y++)
百元买百鸡问题
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);
百元买百鸡问题
x+y+z=100 5x+3y+z/3=100
化 简
令x=4k
分析题意可知: k只能取1,2,3
y=25-7/4*x z=75+3/4*x
x=4k y=25-7k z=75+3k
信息工程学院 LOGO
百元买百鸡问题
C语言解法三:
main() {
枚举次数:
3次!
int k;
for(k=1;k<=3;k++) printf(“鸡翁%d只,鸡母%d只,鸡雏%d只\n",4k,25-7k,z);
信息工程学院 LOGO
百元买百鸡问题
【例2】鸡翁一,值钱五,鸡母一,值钱三,鸡
雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各
几何?
解题思路: 设鸡翁、鸡母、鸡雏的数量分别为x,y,z, 则有以下方程
x+y+z=100
5x+3y+z/3=100 此三元一次方程有多个解,可用枚举法求解。
信息工程学院 LOGO
枚举次数: 20*33=660 次!
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);
}
} LOGO
百元买百鸡问题
有没有更好 的解法呢?
信息工程学院 LOGO
}
信息工程学院 LOGO
百元买百鸡问题
C语言解法一:
main() {
int x, y, z;
for(x=1;x<=100;x++) for(y=1;y<=100;y++)
枚举次数: 100*100*100 =100万次!
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);
信息工程学院 LOGO
引子
【例1】以下式子中的每个汉字代表一个数字,求出 这些汉字代表的数字分别是多少? 慕课制作组 X 慕 组组组组组组
信息工程学院 LOGO
枚举法
计算机解决枚举问题
• 算法简单、精确度高。 • 常用多重循环解决枚举问题(while循环、for循环)。 • 效率低——当问题的规模变大,循环的阶数增加, 执行的速度严重变慢。
}
信息工程学院 LOGO
枚举法
优化策略
• 对问题多加分析,减少循环重数和次数。 • 合理选择用于枚举的变量。 • 减少每种情况的判断时间。 • 是否有其他更好的方法。
信息工程学院 LOGO
知识拓展
试用枚举法解决以下两个问题
• 从1—10的10个数中,每次取2个数,要使它们的
和大于10,一共有多少种取法? • 从学校到少年宫有4条东西走向的马路和3条南北走 向的马路,小明从学校步行到少年宫(只许向东或 向南行走),最多有多少种走法?
LOGO
枚举法实例
主讲教师:门瑞
信息工程学院
什么是枚举法
基本思想
• 枚举也称穷举,指的是从问题可能的解的集
合中一一列举各元素。
• 用题目给定的条件判定哪些是无用的,哪些 是有用的。能使命题成立,即为其解。 • 本质上属于搜索算法
信息工程学院 LOGO
什么是枚举法
特点
• 容易理解,步骤单一。 • 得到的结果肯定是正确的。 • 通常会涉及到求极值(如最大,最小等)。 • 数据量大的话,可能会造成时间崩溃。
信息工程学院 LOGO
LOGO
主讲教师:门瑞
信息工程学院