算法思维:五大基础算法(枚举、递归、分治、贪心、模拟)

一、枚举法

枚举又叫做穷举,其核心思想是从问题所有可能的解的集合中,一个一个列举元素,然后根据问题给定的判断条件来找到能使命题成立的解。

优点:算法简单,使用方便。
缺点:当问题的规模十分大时,循环的次数十分多,减慢运行速度。

例题:百钱买百鸡,公鸡一只三钱,母鸡一只五钱,小鸡三只一钱。试问应如何购买能得到一百只鸡?
根据题意得到方程组:设公鸡x只,母鸡y只,小鸡z只。
x+y+z=100
3x+5y+z/3=100(需要注意的是,在Java中,整型进行除法运算会自动略去小数)
empty
int x,y,z;
for(x = 0;x < 100;x++)
    for(y = 0;y < 100;y++)
        for(z = 0;z < 100;z++)
            if(z % 3 == 0 && x + y + z == 100 && 3x + 5y + z / 3 == 100)    //z % 3 == 0保证小鸡为整数
                System.out.println(x + " " + y + " " + z);

这样的算法还是有点繁琐,我们可以通过题设条件优化算法。
z=100-x-y y<25 等等
empty
int x,y,z;
for(x = 0;x < 100;x++)
    for(y = 0;y < 25;y++){
        z = 100 - x - y;    
        if(z % 3 == 0 &&  3 * x + 5 * y + z / 3 == 100)    //z % 3 == 0保证小鸡为整数
            System.out.println(x + " " + y + " " + z);
            }
当然还可以继续优化,你自己试试吧。

你可能感兴趣的:(算法思维)