Java 实现 蓝桥杯 生兔子问题
生兔子问题
有一对兔子,从出生后第四个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子。假如兔子都不死,计算第十个月兔子的总数?
分析:
四个月开始生兔子,则:F(N) = f(n-1)+ f(n-3)。可以运用递归来解决问题。
import java.util.ArrayList;
import java.util.List;
public class 生兔子 {
public static void main(String[] args) {
// System.out.println(f(13));
int n = 13;
int [] num = new int[14];
num[1]=1;num[2]=1;num[3]=1;
for (int i=4;i<=n;i++){
num[i]=num[i-1]+num[i-3];
}
System.out.println(num[n]);
}
public static int f(int n){
if(n==1 || n==2 || n==3){
return 1;
}
// 今年的 = 去年的+今年新出生
//去年的 今年新出生的
return f(n-1) + f(n-3);
}
}
如果当出生后第三个月开始生兔子: F(N) = f(n-1)+ f(n-2)
今年的总数=去年的总数+今年的新出生的兔子,
而今年新出生的兔子=今年成熟了的兔子数量(每只成熟的兔子生一只小兔),
那今年成熟了的兔子数量又是什么呢?其实就是前年的兔子总数,因为前年的兔子,不管几岁,到今年一定成熟,可以生新兔子了。而去年的没有成熟,不能生兔子。
所以今年的总数=去年的总数+前年的总数。
F(n)=F(n-1)+F(n-2)。
这个数列就是1、1、2、3、5、8、13、21、34、……
在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1963年起出版了以《斐波纳契数列季刊》为名的一份数学杂志,用于专门刊载这方面的研究成果。
(按照上面的改一下就好了)
烦人的来了
但是就有这么一个问题:兔子也会死
出生到死亡只有三年,即n年出生,n+3年死去。
出生一年以后可以生育,也就是n+1年开始生育,一年可以生一只宝宝。
这时我们换一个思路:
定义f(n)为第n年新出生的动物个数,则f(n)=f(n-1)+f(n-2),前两项为1,而每年的总数也就是三项求和而已。
每年出生的数量为1,1,2,3,5,8,13,21
每年兔子的总数是 1,2,4,6,10,16,26,42
Java 实现 蓝桥杯 生兔子问题的更多相关文章
- 日期求星期(java)-蓝桥杯
日期求星期问题(java)-蓝桥杯 1:基姆拉尔森计算公式(计算星期) 公式: int week = (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7; 此处y,m,d指代年 ...
- Java实现 蓝桥杯VIP 基础练习 高精度加法
java算法 蓝桥杯 高精度加法 问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数 ...
- Java实现 蓝桥杯VIP 基础练习 龟兔赛跑预测
题目描述 话说这个世界上有各种各样的兔子和乌龟,但是 研究发现,所有的兔子和乌龟都有一个共同的特点--喜欢赛跑.于是世界上各个角落都不断在发生着乌龟和兔子的比赛,小华对此很感兴趣,于是决定研究不同兔 ...
- java算法 蓝桥杯 乘法运算
问题描述 编制一个乘法运算的程序. 从键盘读入2个100以内的正整数,进行乘法运算并以竖式输出. 输入格式 输入只有一行,是两个用空格隔开的数字,均在1~99之间(含1和99). 输出格式 输出为4行 ...
- java算法 蓝桥杯 扶老奶奶街
一共有5个红领巾,编号分别为A.B.C.D.E,老奶奶被他们其中一个扶过了马路. 五个红领巾各自说话: A :我和E都没有扶老奶奶 B :老奶奶是被C和E其中一个扶过大街的 C :老奶奶是被我和D其中 ...
- java算法 蓝桥杯 高精度加法
问题描述 在C/C++语言中,整型所能表示的范围一般为-231到231(大约21亿),即使long long型,一般也只能表示到-263到263.要想计算更加规模的数,就要用软件来扩展了,比如用数组或 ...
- java算法 蓝桥杯 格子位置
问题描述 输入三个自然数N,i,j (1<=i<=N,1<=j<=N),输出在一个N*N格的棋盘中,与格子(i,j)同行.同列.同一对角线的所有格子的位置. 输入格式 输入共三 ...
- 日期类的使用(java)-蓝桥杯
蓝桥杯日期问题常考,java提供了日期类很方便: //日历类 Calendar c = Calendar.getInstance(); // 获取实例化对象 Date date =c.getTime( ...
- java算法 蓝桥杯 文化之旅
问题描述 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超过一次(即如果他学习了某种文化,则他就不能到达其他有这种文化的国家).不同的国家可能有相同的文化.不同文化 ...
随机推荐
- Two Operations Gym - 102263M 优先队列水题
Two Operations Gym - 102263M Ayoub has a string SS consists of only lower case Latin letters, and he ...
- security安全框架,用户登录安全认证与退出
一.创建用户表及实体类 二.编写security配置文件 <?xml version="1.0" encoding="UTF-8"?><bea ...
- 比较接口(Comparable ,Comparator)及流的聚合操作
Comparable 及 Comparator 的区别 Comparable 一个内比较器,类可以和自己比较 compareTo() 自然比较方法 public interface Comparabl ...
- Docker 镜像制作教程:针对不同语言的精简策略
本系列文章将分为三个部分: 第一部分着重介绍多阶段构建(multi-stage builds),因为这是镜像精简之路至关重要的一环.在这部分内容中,我会解释静态链接和动态链接的区别,它们对镜像带来的影 ...
- js中的小案例(一)
效果图: html代码: <div id="date"> <p> <span id="prev">上一月</span& ...
- Request.params,Request.form,Request.querystring区别(转)
自己总结:---大致意思是: 1.传参的方式分为:get方式传参,post方式传参,request.cookies和request.servervariables 2.这几种获取参数方式获取的都是一个 ...
- form和table的区别
转自:http://www.360doc.com/content/11/0108/14/5416196_84975265.shtml html中form表示一个表单,用来把一系列的控件包围起来,然后再 ...
- 201771010117—马兴德—实验一 软件工程准备—掌握博客中MarkDown的使用以及通读《现代软件工程—构建之法》的总结
实验一 软件工程的前期准备工作 在前期的准备工作以及老师上课的讲解中,我懂得了"软件=程序+软件工程"这句话的基本含义,以前只是对软件工程有一个很浅显的概念,现在在读了<现代 ...
- hdu6153KMP
A Secret Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 256000/256000 K (Java/Others)Total ...
- EventBus/EventQueue 再思考
EventBus/EventQueue 再思考 Intro 之前写过两篇文章,造轮子系列的 EventBus/EventQueue,回想起来觉得当前的想法有点问题,当时对 EvenStore 可能有点 ...