有一对兔子,出生后第3个月起每个月都生一对兔子。小免子长到第3个月后每个月又生一对免子。假设所有兔子都不死,问40个月的免子总数多少对?
第几个月 | 小兔子对数 | 中兔子对数 | 老兔子对数 | 兔子总数 |
1 | 1 | 0 | 0 | 1 |
2 | 0 | 1 | 0 | 1 |
3 | 1 | 0 | 1 | 2 |
4 | 1 | 1 | 1 | 3 |
5 | 2 | 1 | 2 | 5 |
6 | 3 | 2 | 3 | 8 |
7 | 5 | 3 | 5 | 13 |
... | ... | ... | ... | .. |
有图标可以看出每个月的兔子总数依次为
1,1,2,3,5,8,13...这就是有名的斐波那契数列。
解决方法:
设第一个月出生的兔子总数为f1,第二个月出生的兔子总数为f2,以此类推
f1=1,f2=1,f3=f1+f2,f4=f3+f2,f5=f3+f4,f6=f4+f5
由上面公式,我们可以运用for循环很好的解决此类数列,并将公式转换为
第一个月:f1=1
第二个月:f2=1
第三个月:f1=f1+f2
第四个月:f2=f2+f1
第五个月:f1=f1+f2
第六个月:f2=f2+f1
#include<stdio.h>
int main()
{
int f1=1;
int f2=1;
int i;
for(i=1;i<=19;i++)//由于一次计算两个月所以这里执行19次
{
f1=f1+f2;
f2=f2+f1;
}
printf("第四十天兔子的总数: %d\n",f2);
return 0;
}