穷举算法

概念:

最简单算法,依赖计算机的强大计算能力穷尽每一种可能的情况。穷举算法效率不高,但是适合一些没有明显规律可循的场合。

思想:

在使用穷举算法时,需要明确问题答案的范围,这样才可能在指定范围搜索答案。指定范围之后,就可以使用循环和条件判断语句进行逐步验证结果了。

案例:鸡兔同笼问题

在一个笼子里关着若干只鸡和若干兔子。一共有35个头,和94只脚。问在一个笼子里鸡和兔子各有多少个。

package cmd.chengxuyuanzhilu.arithmetic;

import java.util.Scanner;

/**
* @author 微信公众号:程序员之路
* 博客:http://www.cnblogs.com/chengxuyuanzhilu/
* 穷举算法
*/
public class Exhaustion {
public static void exhaustion(int head,int foot){
int chicken,rabbit;
for(chicken=0;chicken<= head;chicken++){
rabbit=head-chicken;
if(chicken*2+rabbit*4 == foot){
System.out.println(String.format("鸡有 %d只,兔子有%d只", chicken,rabbit));
}
}
}
@SuppressWarnings("resource")
public static void main(String[] args) {
int head,foot; System.out.println("穷举算法解决鸡兔同笼问题");
System.out.println("输入头的个数");
Scanner scanner = new Scanner(System.in);
head = scanner.nextInt();
System.out.println("输入腿的个数");
foot = scanner.nextInt();
exhaustion(head, foot);
}
}

递推算法

概念:

递推算法在数学计算等方面广泛应用。递推算法适合有着明显规律的场合

思想:

递推算法往往需要用户知道答案和问题之间的逻辑关系。在许多数学问题中,都有着明显的计算公式可以遵循,因此可以采用递推算法。

案例:兔子产崽子的问题

如果有两个月大的兔子以后每个月都可以产一对小兔子,而一对小兔子出生两个月后可以在生小兔子,也就是1月份出生,3月份才可以产崽子。那么假定一年内没有发生死亡事件,那么现在有一对小兔子一年后共有多少对兔子。

案例分析:

1月 1对兔子

2月 1对兔子

3月 2对兔子 一对成熟兔子

4月 3对兔子

5月 5对兔子 两对成熟兔子

6月 8对兔子 三对成熟兔子

。。。。。。

规律:前两个月都是一对兔子,以后每个月的兔子的对数是前两个月的总和

除1,2月份的计算公式:n月  Fn = (Fn-1)+(Fn-2)

package cmd.chengxuyuanzhilu.arithmetic;

import java.util.Scanner;

/**
* @author 微信公众号:程序员之路
* 博客:http://www.cnblogs.com/chengxuyuanzhilu/
* 递推算法
*/
public class Recurrence {
public static int recurrence(int months){
if( months == 1 || months == 2){
return 1;
}else{
int m1 = recurrence(months-1);
int m2 = recurrence(months-2);
return m1+m2;
}
} @SuppressWarnings("resource")
public static void main(String[] args) {
int months,rabbits; System.out.println("递推算法解决兔子生崽子的问题");
System.out.println("输入月数");
Scanner scanner = new Scanner(System.in);
months = scanner.nextInt();
rabbits = recurrence(months);
System.out.println(String.format("%d月共有兔子%d对", months,rabbits));
}
}

穷举算法和递推算法(Java)的更多相关文章

  1. 基本算法思想之递推算法思想(C++语言描述)

    递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用.递推算法适合有明显公式规律的场合. 递推算法基本思想 递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果.递推算法 ...

  2. 关于递推算法求解约瑟夫环问题P(n,m,k,s)

    一. 问题描述 已知n个人,分别以编号1,2,3,...,n表示,围坐在一张圆桌周围.从编号为k的人开始报数1,数到m的那个人出列:他的下一个人又从1开始报数,数到m的那个人又出列:依此规律重复下去, ...

  3. C++ 穷举算法 鸡兔同笼

    #include "stdio.h" int qiongju(int head, int foot, int *chicken, int *rabbit) { int re, i, ...

  4. 数据结构与算法之递推算法 C++与PHP实现

    数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的.往往是在发展一种算法的时候,构建了适合于这样的算法的数据结构.一种数据结构假设脱离了算法,也就没有存在的价值了. 算法的作用----解决 ...

  5. 基本算法思想之穷举法(C++语言描述)

    穷举算法(Exhaustive Attack method)是最简单的一种算法,其依赖于计算机的强大计算能力来穷尽每一种可能性,从而达到求解问题的目的.穷举算法效率不高,但是适应于一些没有规律可循的场 ...

  6. 使用穷举法结合numpy解决八皇后问题

    一般说到八皇后问题,最先想到的就是回溯思想,而回溯思想往往是需要递归来实现的. 计算机很善长做重复的事情,所以递归正和它的胃口,而我们人脑更喜观平铺直叙的思维方式.当 我们看到递归时,总想把递归平铺展 ...

  7. javascript--枚举算法实现

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. C语言 分支与循环 递推思想 穷举 流程的转移控制

    条件语句 开关控制语句(SWITCH语句) 象坐电梯一样,break是按的楼层,不加break则会一直执行下去. 上面程序有细节BUG,边界测试输入-5,105时由于整除会得到错误的结果. 解决方法: ...

  9. HDU 1017 A Mathematical Curiosity【看懂题意+穷举法】

    //2014.10.17    01:19 //题意: //先输入一个数N,然后分块输入,每块输入每次2个数,n,m,直到n,m同一时候为零时  //结束,当a和b满足题目要求时那么这对a和b就是一组 ...

随机推荐

  1. centos shell编程4【分发系统】 服务器标准化 mkpasswd 生成密码的工具 expect讲解 expect传递参数 expect自动同步文件 expect指定host和要同步的文件 expect文件分发系统 expect自动发送密钥脚本 Linux脚本执行方式 第三十八节课

    centos shell编程4[分发系统] 服务器标准化  mkpasswd 生成密码的工具  expect讲解   expect传递参数   expect自动同步文件  expect指定host和要 ...

  2. 003-and design-dva.js 知识导图-02-Reducer,Effect,Subscription,Router,dva配置,工具

    一.Reducer reducer 是一个函数,接受 state 和 action,返回老的或新的 state .即:(state, action) => state 增删改 以 todos 为 ...

  3. sql 用xml方式插入数据乱码问题解决方法

    sql 使用存储过程 参数为xml字符串 xml不要写编码,如下 <?xml version=\"1.0\" ?><root>数据字符串</root& ...

  4. Spark中文文本分析建模

    实用的朴素贝叶斯模型建模 建模过程主要是把文本转化成向量然后再作分析 数据格式: ,善良 美丽 ,丑陋 阴险 卑鄙 ,温和 ....... 注:前面是给文章贴的标签,后面是文章的分词,分词可以找关于分 ...

  5. Spring Cloud组件完整

    有关项目启动和配置的说明: 1.最先启动的是eureka-server,并且你需要在整个测试过程中保持它的启动状态,因为它是注册中心,大多数服务必须依赖于它才能实现必要的功能. 2.如果你想测试配置中 ...

  6. Java中com.jcraft.jsch.ChannelSftp讲解

    http://blog.csdn.net/allen_zhao_2012/article/details/7941631 http://www.cnblogs.com/longyg/archive/2 ...

  7. Java数据结构和算法总结-字符串相关高频面试题算法

    前言:周末闲来无事,看了看字符串相关算法的讲解视频,收货颇丰,跟着视频讲解简单做了一下笔记,方便以后翻阅复习同时也很乐意分享给大家.什么字符串在算法中有多重要之类的大路边上的客套话就不多说了,直接上笔 ...

  8. 一次频繁Full GC问题排查过程分享

    问题描述 应用收到频繁Full GC告警 问题排查 登录到对应机器上去,查看GC日志,发现YGC一分钟已经达到了15次,比Full GC还要频繁一些,其中Full GC平均10分钟超过了4次,如下图 ...

  9. P1136 迎接仪式

    P1136 迎接仪式 $O(n^{2}k)$:$f[i][k]$表示到第$i$个字符为止,交换$k$次,得到的最多子串数 那么枚举位置$j$,状态可以从$f[j][k-1]+1$转移过来 $O(nk^ ...

  10. 20145219《网络对抗技术》PC平台逆向破解之逆向与Bof基础

    20145219<网络对抗技术>PC平台逆向破解之逆向与Bof基础 实践目标 实践对象:一个名为pwn1的linux可执行文件. pwn1正常执行流程:main调用foo函数,foo函数会 ...