枚举法:列出问题所有的解,然后根据判断条件逐个验证对错。若满足判断条件,则问题解决。否则,问题无解。
设计模式:1.分析题目,确定可解的范围。2.设计循环结构,包括循环次数和判断条件,在循环体内对可能解逐一判定,直至求出问题解。3.为了提高解决问题的效率,使可能解的范围降至最小。注意,小心电脑罢工!
明明小试牛刀:1.百元买百鸡
假期来临,明明终于可以回农村的爷爷奶奶家做客了。爸爸打算花一百块钱买一百只鸡送给爷爷,让爷爷的鸡舍有些新面孔。一问价格:公鸡每只5元,母鸡每只3元,三只小鸡1元。这可难到明明爸了,用100元买100只鸡,问公鸡、母鸡、小鸡各多少只?
明明爸爸花了好大力气罗列了不少清单,明明笑着说:“老爸,交给我的电脑吧”!只见小明在电脑前啪啪敲了几行代码,就帮老爸解决了问题!
原来100元买100只鸡,不光光只有一种选择,电脑竟然把所有的选择方案都给我们列了出来,足足有四种选择方案!明明爸爸不相信的照着只数和价格验算了下,连连夸明明真聪明!小明谦虚的说是昨天看了龚老师少儿编程课堂的枚举法,举一反三想出了办法。
聪明的你,想到办法了吗?
2,算法分析:
利用枚举法解决该问题,以三种鸡的个数为枚举对象,分别设为mj,gj和xj,用三种鸡的总数(mj+gj+xj=100)和买鸡钱的总数(1/3*xj+mj*3+gj*5=100)作为判断条件,穷举各种鸡的个数。
让电脑把三种小鸡挨个数过来,【所以枚举对象就是小鸡种类了,mj,gj,xj】,当三种小鸡总数,公鸡数+母鸡数+小鸡数达到100只的要求和买鸡花的钱,公鸡每只5元,母鸡每只3元,3只小鸡一元,刚好100元时,达到明明爸爸的购买要求。【所以,判断条件是小鸡总数100只(mj+gj+xj=100)和总花费100元(1/3*xj+mj*3+gj*5=100)】
3.代码实现:
第一重循环:电脑从0只公鸡数到20只公鸡【100元最多也只能买20只公鸡了】。第二重循环:电脑从0只母鸡数到33只母鸡【100元最多也只能买33只母鸡,虽然还剩了一元钱】。惯性思维会让我们再设一重循环,但是我们看看判断条件:小鸡总数100只(mj+gj+xj=100)。【那么,小鸡数目肯定是100只鸡中除去公鸡、母鸡的数目。】。
确定了公鸡、母鸡、小鸡数目。我们来算价格吧!公鸡5元每只,母鸡3元每只,小鸡1元3只。只有小鸡的价格有点奇怪,我们要把100元花完,看来小鸡只能打包出售了。所以,我们买的小鸡数目必须是3的倍数。