package wulj;

 /**
* Java算法之“兔子问题”:
* 有一只兔子,从出生后第3个月起每个月都生只兔子,小兔子长到第三个月后每个月又生一只兔子,假如兔子都不死,问每个月的兔子总数为多少?
* @Description
* @author wulj
* @date 2018年6月1日
*/
public class WljTest {
/**
* 转化为数学问题如下:
* 1.假设第一个月的兔子数为:a,第二个月的兔子数为:b
* 2.假设第一个月的新兔子数为 :new,老兔子数为:old 即:a=new + old;,则 第二个月b= new + 2*old;
* 到了第三个月的时候,则第二个月的 new存储的已经是老兔子,新兔子实际是old产生的,所以第三个月的秃子数量为:c= 2*(new + old) + old
* 3.化简后发现 a=new + old
* b= new + 2*old
* c= 2*new + 3*old
* 即:c= a + b;
* 因此转换为代码实现如函数:rabbitProblem()
*/
public static void rabbitProblem(){
int sum_rubbit;//每月的兔子总数
int pre_pre_rubbit = 1;//前两个月的兔子数
int pre_rubbit = 1;//前一个月的兔子数
for (int i = 3; i <= 12; i++) {
sum_rubbit = pre_pre_rubbit + pre_rubbit;
pre_pre_rubbit = pre_rubbit;
pre_rubbit = sum_rubbit;
System.out.println("第" + i + "个月的兔子总是为:" + sum_rubbit);
}
}
public static int rabbitProblem_digui(int month){
int sum=0;
if(month == 1 || month == 2){
return 1;
}else{
sum = rabbitProblem_digui(month-1)+rabbitProblem_digui(month-2);
return sum;
} } /**
* 另外一种思路--转化为数学问题如下:
* 1.假设第一个月的兔子数为:a,第二个月的兔子数为:b
* 2.假设第一个月的新兔子数为 :new,老兔子数为:old 即:a=new + old;,则 第二个月b= new + 2*old;
* 到了第三个月的时候,则第二个月的 new存储的已经是老兔子,新兔子实际是old产生的,所以第三个月的秃子数量为:c= 2*(new + old) + old
* 通过上面的规律我们发现:
* 当月的new的数量和上个月的old数量是相等的,当月的old的数量是上个月的new与上个月的old的数量之和,当月的总数量是当月的new和当月的old的数量之和
* 因此转换为代码实现如函数:rabbitProblem_new()
*/
public static void rabbitProblem_new(){
int sum_rubbit = 0;//每月的兔子总数
int new_rubbit = 1;//前两个月的兔子数
int old_rubbit = 0;//前一个月的兔子数
int temp_new = 0;
//第一个月:
for (int i = 1; i <= 12; i++) {
sum_rubbit = new_rubbit + old_rubbit;
temp_new = old_rubbit;
old_rubbit = old_rubbit + new_rubbit;
new_rubbit = temp_new;
System.out.println("第" + i + "个月的兔子总是为:" + sum_rubbit);
}
} /**
* 递归方法
* @param i
* @param new_rubbit
* @param old_rubbit
*/
public static void rabbitProblem_new_digui(int i, int new_rubbit,int old_rubbit){
int sum_rubbit = 0;//每月的兔子总数
int temp_new = 0;
sum_rubbit = new_rubbit + old_rubbit;
if(i == 12){
System.out.println("第" + i + "个月的兔子总是为:" + sum_rubbit);
return;
}else{
temp_new = old_rubbit;
old_rubbit = old_rubbit + new_rubbit;
new_rubbit = temp_new;
rabbitProblem_new_digui(i+1,new_rubbit,old_rubbit);
}
System.out.println("第" + i + "个月的兔子总是为:" + sum_rubbit); }
public static void main(String[] args) {
rabbitProblem_new_digui(1,1,0);
}
}

Java算法之“兔子问题”的更多相关文章

  1. JAVA算法系列 冒泡排序

    java算法系列之排序 手写冒泡 冒泡算是最基础的一个排序算法,简单的可以理解为,每一趟都拿i与i+1进行比较,两个for循环,时间复杂度为 O(n^2),同时本例与选择排序进行了比较,选择排序又叫直 ...

  2. JAVA算法系列 快速排序

    java算法系列之排序 手写快排 首先说一下什么是快排,比冒泡效率要高,快排的基本思路是首先找到一个基准元素,比如数组中最左边的那个位置,作为基准元素key,之后在最左边和最右边设立两个哨兵,i 和 ...

  3. java算法 蓝桥杯 乘法运算

    问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...

  4. java算法 蓝桥杯 扶老奶奶街

    一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...

  5. java算法 蓝桥杯 高精度加法

    问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...

  6. java算法 蓝桥杯 格子位置

    问题描述 输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行.同列.同一对角线的所有格子的位置. 输入格式 输入共三 ...

  7. java算法----排序----(6)希尔排序(最小增量排序)

    package log; public class Test4 { /** * java算法---希尔排序(最小增量排序) * * @param args */ public static void ...

  8. java算法----排序----(5)归并排序

    package log; import java.util.Arrays; public class Test4 { /** * java算法---归并排序 * * @param args */ pu ...

  9. java算法----排序----(4)快速排序

    package log; public class Test4 { /** * java算法---快速排序 * * @param args */ public static void main(Str ...

随机推荐

  1. 基于部标Jt/T809协议和Java Netty框架构建Gps位置监控平台

    现在地方上由于运输车辆的GPS数据都分散在地方上已有的各种企业平台上面,不利于大数据的分析和智能应用,而开发智能的基于大数据的Gps监控平台,往往需要和各种第三方的部标GPS监控平台对接,获取到第三方 ...

  2. Oracle密码过期,取消密码180天限制

    1.进入sqlplus模式 sqlplus / as sysdba; 2.帐户再改一次密码 alter user 用户名 identified by 原密码; 3.查看用户密码的有效期设置(一般默认的 ...

  3. JSON学习【转自慕课网】

    视频网址 从慕课网视频里的PPT截图过来的,因为是用PHP讲的,而且后面讲的一般,所以只截取了前两节课的基础内容,其实只看一下第一张PPT就可以了.

  4. Google Analytics Overview - Google Analytics 概述

    该文档讨论了如何开始使用Google Analytics SDK for Android v3. Before you Begin - 在开始之前 在开始实现SDK之前,请确保有下面的东东: 1.  ...

  5. zoj 1109 Language of FatMouse(字典树)

    Language of FatMouse Time Limit: 10 Seconds      Memory Limit: 32768 KB We all know that FatMouse do ...

  6. spring-test使用介绍

    一.首先引入spring的jar文件到项目中,我采用maven管理项目依赖的jar包: <properties> <spring.version>4.0.0.RELEASE&l ...

  7. Ubuntu 12.04 server 如何安装 OpenERP 7(转)

    不经意的一次看到OpenERP这个开源ERP,就被其丰富的功能,简洁的画面,熟悉的语言所吸引.迫不及待的多方查询资料,自己架设一个测试环境来进行了解.以下为测试安装时候的步骤说明,以备查询,并供有需要 ...

  8. gcc 遇到过的语法问题

    1.在ubuntu 12.04 环境下,在/etc/ld.so.conf.d/目录里添加某个so库的配置路径,比如 /home/myself/abc/lib/ 执行 sudo ldconfig

  9. 简单说明什么是递归?什么情况会使用?并使用java实现一个简单的递归程序。

    解答: 1)递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程中直接或间接调用自身而产生的重入现象. 2)递归算法一般用于解决三类问题: a.数据的定义是按递归定义的.(Fib ...

  10. Android 消息处理源代码分析(2)

    Android 消息处理源代码分析(1)点击打开链接 继续接着分析剩下的类文件 Looper.java public final class Looper { final MessageQueue m ...