s1e16 生兔子问题——斐波那契数列
每一对新兔子出生第一个月没哟生育能力,从第二个月起,每月可以生一对新兔子。假设兔子不死,初值的一对两年后存在多少兔子。看到题目后,对照小甲鱼在下面列出的图表,发现看不懂题目了。
按照题目所说,第一个月应该是1对老兔子,可以生出来1对小兔子,兔子总数2对。第二个月由于上个月新生兔子不能生育,那么只有1对小兔子出生,这个月,有1对兔子具有生育能力,有1对兔子不具有生育,1对新出生的兔子,兔子总数3对。。。。。。。。。然后对照小甲鱼给出的图,第一个月1对,第二个月2对,第三个月4对,我迷茫了。在考虑之后,根据小甲鱼给出的规则利用Excel表格列出了24个月各种兔子的数量如下:
在表格里用批注标注出来每个格内容的来历。然后把这个表格用C语言表现出来,并运行,得到与表格内容相同的结果。
小甲鱼的答案写法比我的简单,运行后,数据和我的大不一样,于是将运行结果也在表格里列出,比较二者差别很大。
我不纠结斐波那契数列问题,纠结的是根据小甲鱼给出的题目条件,我错在哪里了?
我和小甲鱼程序列表对比见下图:
我的程序清单如下:
#include<stdio.h>
int month,i=1,j=0,k=0,j_0=0,k0=0;//month计算月份,i能生育的老兔子,j不能生育的兔子,k本月新生兔子,j_0为上月不能生育兔子,k0为上月新生兔子。
//计算规则:不能生育的兔子j下月可以生育(数量加入老兔子i),本月新生兔子k下月不能生育j,1对老兔子每月生育1对新生兔子k=i。
int main()
{
for(month=1;month<=24;month++)
{
//计算本月兔子数量
j=k0;
k=i;
i+=j_0;
j_0=j;
k0=k;
printf("第%d月,老兔子i=%d,不能生育兔子%d,小兔子%d.\n",month,i,j,k);
}
printf("两年之后存在的兔子数量:%d\n",i+j+k);
return 0;
}
是你看错了。
应该是
月数:0 1 2 3 4 5
兔子:1 1 2 3 5 8
f(n)=f(n-1)+f(n-2)(n>2)
1(n==0||n==1) ExiaGN001 发表于 2022-6-25 10:15
是你看错了。
应该是
月数:0 1 2 3 4 5
我在帖子里也说了,我现在纠结的不是斐波那契数列问题。是完全针对这个题目来考虑问题的话,不应该是用这个式子。我用Excel完全体现了小甲鱼在题目里的要求,结果不是斐波那契数列。请指出我用Excel列出数据哪里和题目不符。谢谢。 顶级太阳 发表于 2022-6-25 10:28
我在帖子里也说了,我现在纠结的不是斐波那契数列问题。是完全针对这个题目来考虑问题的话,不应该是用这 ...
这里面就没有通项公式,没办法用excel来展示 看看这个
https://blog.csdn.net/u012762573/article/details/48106309 1月:有一对成熟兔子,所以新生一对兔子
2月:有一对成熟兔子和一对未成熟兔子,所以新生一对兔子,总共3对
3月:有两对成熟兔子和一对未成熟兔子,为何还是新生一对兔子?
后面同理全是这问题
且不说题目条件或是斐波那契数列,就这结果本身逻辑是否讲得通? 对照我的数据吧:{:10_269:}
傻眼貓咪 发表于 2022-6-25 12:10
对照我的数据吧:
明白了,谢谢。我的列表成了新生兔子2月不能生小兔子。谢谢
页:
[1]