引言
大家在学习python的过程中,肯定会遇到各种算法,这里面有简单的也有复杂的,譬如简单的有枚举法、模拟法…等,稍微难点的有图的深度优先遍历算法、图的宽度优先遍历算法…等等,今天小编不讲那些比较难得算法,来讲讲最基础最简单的算法——枚举法。读者们可不要因为这是简单算法就不感兴趣哦!任何复杂的算法其实都是由简单算法演变而来,万丈高楼平地起。好了,下面是小编的一些拙见。
问题描述
现在很多人喜欢打篮球吧,篮球规则里面:投篮不进得零分,进一颗罚篮得一分,进一颗两分得两分,进一个颗三分得三分。如果有一个球员投了20次篮,一共得了30分,那么请问:他投了几次罚篮,几次中投,几次三分?
解决方案
一分钟,大家快速想想有几种可能。这道题包含了很多种可能,比如1.投10个三分球,另外10个球不投进。2.投15个两分,另外5个球不投进。3.投进2个三分球,12个两分球,另外6个球不投进…等等,所以可能性太多了!不知道读者朋友们想到了几种。仔细的朋友们可能发现我用了‘1’,‘2’,‘3’这样的字符。
这就是今天小编想讲的枚举法:把能想到的所有可能性全部列出来,然后再逐个筛选,剔除不符合题意的(用这题举例,比如全部投进两分球,很明显不符合题意,直接pass)。
使用枚举法时注意的事项:(1)可以先直观判断不符合要求的可能选项(2)从最大的可能性选项开始依次减小。还是以这题举例,投进三分得最大可能性就是10个,所以进三分球的个数一定一定不会超过10个。投进两分球的个数依次类推。(3)可以一边列举可能,一边判断。意思就是一个一个判断,我觉得既可以避免漏解又可以避免重复。
结语
好啦,这就是今天小编想与大家分享的枚举法。其实这里面还有很多奥妙,小编这不过只是冰山一角,而其中更多更有意思的部分还要读者朋友们自己去挖掘,自己发现的东西一定会更加印象深刻,更加让人激动。如果有机会,小编会与大家继续分享自己的心得体会。要是喜欢的话,请给小编点个小心心!!!