本文已参与「新人创作礼」活动,一起开启掘金创作之路。
声明:版权归本人所有,违者必究。
转载请注明来源 https://juejin.cn/post/7111941657045499912
1.1. 枚举算法
1.1.1. 算法定义
在进行归纳推理时,如果逐个考察了某类事件的所有可能情况,因而得出一般结论,那么该结论是可靠的,这种归纳方法叫做枚举法。
1.1.2. 基本思想
枚举算法的基本思想是,将问题的所有可能得答案一一列举,根据条件逐个判断,从中选出符合需求的答案。设计步骤为:
(1)选择合适的研究对象的范围。
(2)找到判断正确解的条件。
(3)逐一检验范围内的所有研究对象
执行流程如下:
此算法思想简单,易于理解,算法的正确性容易证明;但在枚举范围大的情况下,根据条件的不同,在某种情况下会表现的效率低下。
1.1.3. 算法实例--百钱买百鸡
问题描述:
公鸡每只5元,母鸡每只3元,三只小鸡1元,用100元买100只鸡,问公鸡、母鸡、小鸡各多少只?
算法分析:
利用枚举法解决该问题,以三种鸡的个数为枚举对象,分别设为mj、gj和xj,用三种鸡的总数 (mj+gj+xj=100)和买鸡钱的总数(gj5+mj3+xj/3==100)作为判定条件,穷举各种鸡的个数。其中公鸡5元/只,最多可以买20只公鸡;母鸡3元/只,最多可以买33只母鸡;小鸡1元/只,最多可以买100只。
代码实现:
【例1-1】 百钱买百鸡:
for gj in range(0,23):\
for mj in range(0,34):\
xj = 100-gj-mj\
if xj%3==0 and gj*5+mj*3+xj/3==100:\
print("100元可以买到公鸡:{},母鸡:{},小鸡:{}".format(gj, mj, xj))
执行结果:
100元可以买到公鸡:0,母鸡:25,小鸡:75
100元可以买到公鸡:4,母鸡:18,小鸡:78
100元可以买到公鸡:8,母鸡:11,小鸡:81
100元可以买到公鸡:12,母鸡:4,小鸡:84