第2章穷举法与迭代法2.1穷举法概念与举例2.2迭代法概念与举例学习要点:•理解穷举法的概念。•掌握简单实例的编程。•理解迭代法的概念。•掌握简单实例的编程。第2章穷举法与迭代法第2章穷举法与迭代法2.1穷举法概念与举例2.2迭代法概念与举例2.1.1穷举法(Enumerate)概念穷举法:又叫枚举法,指按一定顺序对问题所有可能的候选区间进行校验,从中找出符合要求的解集。•通常用来求不定解。穷举法特点穷举是最简单,最基础,也是最没效率的算法。穷举拥有很多优点,以致于它能够存活到现在而不被淘汰。1)穷举具有超级无敌准确性,只要时间足够,正确的穷举得出的结论是绝对正确的。2)穷举拥有天下第一全面性,因为它是对所有方案的全面搜索,所以,它能够得出所有的解。2.1.1穷举法(Enumerate)概念穷举法在使用时,主要考虑以下两个方面:(1)找出穷举范围:分析问题所涉及的各种情况;(2)找出约束条件:分析问题的解需要满足的条件并用逻辑表达式表示。程序实现时,通常需要用多重循环(循环次数取决于变量的个数)来实现。2.1.1穷举法(Enumerate)概念2.1.2穷举法举例【例1】把一元钞票换成一分、二分、五分硬币(每种至少一枚),有哪些种换法?【例2】水仙花数--是指一个n(>=3)位数字的数,它等于每个数字的n次幂之和。求1000以内的水仙花数。【例3】百鸡问题——公元前五世纪,我国古代数学家张丘建在《算经》一书中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?Flower()•for(n=100;n<10000;n++)•i=n/100•j=n/10%10•k=n/100%10•if(n=i*i*i+j*j*j+k*k*k)•输出n求解水仙花数问题的伪代码算法1求解水仙花数问题的伪代码Flower()1fori←1to92doforj←0to93dofork←0to94doifi*i*i+j*j*j+k*k*k=100*i+10*j+k5then输出ijk算法2求解水仙花数穷举算法的C++代码#include
flower()•{inta,b,c;•for(a=1;a<=9;a++)•for(b=0;b<=9;b++)•for(c=0;c<=9;c++)if(100*a+10*b+c==a*a*a+b*b*b+c*c*c)•{cout<