博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java算法-穷举算法思想
阅读量:7072 次
发布时间:2019-06-28

本文共 1835 字,大约阅读时间需要 6 分钟。

hot3.png

    穷举算法是最简单的一种算法,其依赖于计算机的强大计算能力,来穷尽每一种可能的穷狂,从而达到求解问题的目的。穷举算法效率并不高,但是适合于一些没有显示规律可循的场合。使用场景如(密码暴力破解

一、穷举算法基本思想

    穷举算法的基本思想就是从所有可能的情况中搜索正确的答案,其执行步骤如下:

  • 1.对于一种可能的情况,计算其结果。
  • 2.判断结果是否满足要求,如果不满足则执行上一步来搜索下一个可能的情况;如果满足要求,则表示寻找到了一个正确答案。

    在使用穷举算法是,需要明确问题答案的范围,这样才可以在指定范围内搜索答案。指定范围之后,就可以使用循环语句和条件判断语句逐步验证候选答案的正确性,从而得到需要的正确答案。

二、穷举算法实例

    穷举法是最基本的算法思想,下面通过一个简单的例子来分析穷举算法的应用。鸡兔同笼问题最早记载中1500年前的《孙子算经》,这是我国古代一个非要有名的问题。鸡兔同笼问题的原文如下:

    今天鸡兔同笼,上有三十五个头,下有九十四足,问鸡兔各几何?

    这个问题的大致意思是:在一个笼子里关着若干只鸡和若干只兔,从上面看共有35个头;从下面数共有94只脚。问笼中鸡和兔的数量各是多少?

    1、穷举算法

        通过分析可以知道鸡的数量应该为0~35之间的数。这样可以使用穷举法来逐个判断是否符合。

public static int qiongju(int head, int foot){    int i,j,re;    re=0;    for (i = 0; i <= head; i++) {        j = head-1;        if (i*2+j*4 == foot) {            re = 1;            chicken = i;            rabbit = j;        }    }    return re;}

    2、穷举算法求解鸡兔同笼问题

public class mian1 {     /**     * 今天鸡兔同笼,上有三十五个头,下有九十四足,问鸡兔各几何?     */    static int chicken,rabbit;    public static int qiongju(int head, int foot){        int i,j,re;        re=0;        for (i = 0; i <= head; i++) {            j = head-i;            //2x+4y =94;            if (i*2+j*4 == foot) {                re = 1;                chicken = i;                rabbit = j;            }        }        return re;    }    public static void main(String[] args) {//        System.out.println("穷举法求解鸡兔同笼问题");//        System.out.print("请输入头数:");//        Scanner scanner = new Scanner(System.in);//        int head = scanner.nextInt();//        System.out.print("请输入脚数:");//        int food = scanner.nextInt();//        re=qiongju(head,food);                  int re;        re=qiongju(35,94);        if(re == 1){            System.out.println("鸡有多少只"+chicken+";兔有多少只"+rabbit);        }else{            System.out.println("无解");        }    }}

效果如下:

鸡有多少只23;兔有多少只12

转载于:https://my.oschina.net/u/3659224/blog/1519375

你可能感兴趣的文章
网众设置开机重启服务的命令,才可连接BOOT服务器
查看>>
数字签名基本原理
查看>>
RHEL6.3 DNS配置详解一 DNS相关概念理解及配置基础
查看>>
Windows环境 和 Linux环境下搭建Qt开发环境
查看>>
简述synchronized和java.util.concurrent.locks.Lock的异同
查看>>
辅DNS服务器部署文档(for linux平台)
查看>>
weblogic安装问题
查看>>
在win2008r2下开启ntp服务
查看>>
我的友情链接
查看>>
SpringMVC源码解析(三)——HandlerAdapter
查看>>
Python执行系统命令的方法
查看>>
动态加载远程Jar的实现方式
查看>>
无线***笔记(一)-《***WPA-PSK加密无线网络》
查看>>
MyEclipse10.1集成SVN
查看>>
Sitemesh和Struts2结合时Filter的配制顺序
查看>>
【python】编程语言入门经典100例--19
查看>>
[tomcat7源码学习]ClassLoader加载Tomcat的依赖
查看>>
解决MySQL Master/Slave 同步出错
查看>>
常用的主机监控Shell脚本
查看>>
CentOS历史版本下载方法
查看>>