Java 实现 蓝桥杯 生兔子问题
JAVA 实现 蓝桥 问题 兔子
2023-09-14 08:58:07 时间
生兔子问题
有一对兔子,从出生后第四个月起每个月都生一对兔子,小兔子长到第四个月后每个月又生一对兔子。假如兔子都不死,计算第十个月兔子的总数?
分析:
四个月开始生兔子,则: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 登录 qq_Java实现QQ登录
- java 实现多态_Java多态的实现原理
- java实现ajax_Ajax&Java
- stun client java实现_stun 协议客户端实现
- JAVA的使用_Java集成开发环境
- java操作剪贴板代码示例详解编程语言
- 自己写一个java.lang.reflect.Proxy代理的实现详解编程语言
- Java监控MySQL性能:实现数据库运行优化(java监控mysql)
- 分布式Java实现Redis分布式:从入门到精通(java实现redis)
- 失效Java操作Redis实现数据过期失效(redisjava过期)
- 清理使用Java实现Redis过期数据的清理(redisjava过期)
- 策略Java使用Redis实现过期策略(redisjava过期)
- 数据处理实现Java环境下的Redis过期数据管理(redisjava过期)
- 处理使用Java实现Redis数据过期处理(redisjava过期)
- Java与MySQL的无缝衔接:实现高效数据操作(java中使用mysql)
- Java实现与Oracle数据库的无缝整合(java整合oracle)
- Java导入Oracle 实现快速数据传输(java导入oracle)
- 使用Java实现Redis锁定的实现(redis锁定 java)
- java大数乘法的简单实现浮点数乘法运算