每日一算法

作者: AlgorithmIsSoul | 来源:发表于2018-05-05 17:53 被阅读136次


    穷举法:

    又叫枚举法。

    穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。

    也许有些人认为,穷举法未免太"笨拙",的确,穷举法有着其致命的缺点------效率低下,但是,在一些领域,利用计算机高速运算能力与穷举法相结合能够解决某些无规律的问题。另外,经常有黑客利用穷举法破解密码。因此,这样看似"笨拙"的穷举法,有有时候能够发挥大作用。

    下面来看一下穷举法的简单应用

    鸡兔同笼

    每日一算法

    鸡兔同笼,是我国古代著名趣题之一,记载于《孙子算经》之中。

    其原题是:今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?

    大致意思是:有鸡和兔在同一笼子,已知有35个头,94只脚,问鸡有几只,兔有几只?

    鸡兔同笼问题求解:

    分析:由于此问题没有明显的规律,因此可以考虑采用简单粗暴的穷举法。在一定范围内将所有可能情况一一尝试

    java代码如下

    import java.util.*;

    public class JiTuTongLong{

    public static int chicken,rabbit,re;

    /*定义为类变量,便于主函数访问。*/

    public static void main(String[] args){

    Scanner s=new Scanner(System.in);

    System.out.println("请输入头个数");

    int head=s.nextInt();

    System.out.println("请输入脚只数");

    int foot=s.nextInt();

    qiongju(head,foot);

    if(re==1){

    System.out.println("鸡有"+chicken+"只\t兔子有"+rabbit+"只");

    }

    else{

    System.out.println("无法求解");

    }

    }

    public static int qiongju(int head,int foot){

    int i,j;

    for(i=0;i<=head;i++){

    j=head-i;

    if(2*i+4*j==foot){

    /*如果满足条件就向chicken,rabbit赋值。*/

    chicken=i;

    rabbit=j;

    re=1;//用于判断是否有解

    }

    }

    return re;

    }

    }

    就这样,通过利用计算机强大的计算能力,一步一步地尝试,直到得出结果。

    好了,本期的《每日一算法》就讲到这里,希望大家可以多多支持哦!

    //注:由于本人接触编程不久,若有错误或更好建议,欢迎指正或提出建议。

    相关文章

      网友评论

      • 不知名小号:这道题有明显规律的。鸡数✖2+兔数✖4=脚数,鸡数➕兔数=头数。所以鸡数=头数减去兔数,代入第一个方程,再移项就能得到兔数的表达式,然后鸡数的结果也出来了。
        AlgorithmIsSoul:@awei1024 非常感谢你的建议。😄
      • 不知名小号:这个应用场景不适合穷举,直接联立方程组就能出来答案了,穷举不是更慢了吗?穷举的简单例题应该是水仙花数或者其他。
      • IT人故事会:你的思路可以借鉴来用!
        AlgorithmIsSoul:@IT人故事会 谢谢。

      本文标题:每日一算法

      本文链接:https://www.haomeiwen.com/subject/mzvvlftx.html