在程序设计中,经常需要根据给定的一组条件来求满足条件的解。例如,求200以内的质数,求各位数字的立方和与其本身相等的三位数,等等。如果能找到明确的求解公式或计算规则,那么就可以很容易地写出相应的程序。但是,对于许多问题,都难以找到明确的公式和计算规则。遇到这样的问题怎么办呢?穷举法是比较适合解决这类问题的一种算法。其基本思路是:根据问题给定的一部分条件,列出所有的可能解,然后再逐一验证哪些可能解能够满足问题的全部条件,从而得到问题的真正的解。显然,穷举法是基于计算机的“快速运行”这一特点设计的算法。穷举法又叫作枚举法。
穷举法是效率最低的一种算法,因为它需要列举出许多个可能解(这些可能解中也许只有很少一部分才是真正的解),程序往往需要运行很长时间。但是,穷举法的优点也很明显。穷举法的思路简单,容易编写程序,只要时间足够,穷举法能够很容易地求出问题的全部正确解。设计穷举算法时,应该尽可能多地将不符合条件的情况预先排除,以便尽快求出问题的解。
穷举法的算法模式为:
(1)根据部分条件,确定可能解的范围(一般通过循环结构来实现)。
(2)用其余的条件对可能解进行验证,确定是否为真正的解。
(3)用优化语句缩小搜索范围,跳过一些显然不正确的可能解,缩短程序运行时间。
例13-1 找出100以内的所有质数。
分析:质数具有很明显的特征,即“只能被自身和1整除”,但是没有明显的计算公式,因此适合使用穷举法。
首先确定可能解的范围:1到100之间的全部整数。(www.xing528.com)
验证条件为:若数n不能被2到n-1之间的任何整数整除,则n是质数。
程序如下:
注意:虽然我们可以用上述方法解决问题,但是如果要找3 000或更大的数以内的质数,计算机执行循环的次数会很多。所谓程序优化就是在保证程序结果正确前提下精简程序的过程。
思考:编写查找1~100中的偶数并输出的程序。
例13-2 古希腊人称因子的和等于数本身的数叫完全数(自身因子除外),编写一程序求2~10 000内的所有完全数。
分析:所谓因子是指能被本数整除的数。如28的因子是1、2、4、7、14,且1+2+4+7+14=28,则28是一个完全数。因此,确定搜索范围是2~10 000。根据完全数的定义,先找出所有因子,再验证所有因子之和是否等于该数。
程序如下:
思考:如果对上题要求输出格式为28=14+7+4+2+1,程序应如何修改?
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。