有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子有多少对?
月份 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
兔子对数 | 1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 |
f(n)=f(n-1)+f(n-2)称为斐波那契数列
用数组方法解决如下:
#include<stdio.h>
int main()
{
int f[1000];
int i,n;
scanf("%d",&n); //输入月份;
f[0]=1; //第一个月是一对兔子;
f[1]=1; //第二个月是一对兔子;
printf("%d\n",f[0]);
printf("%d\n",f[1]);
for(i=2;i<n;i++)
{
f[i]=f[i-1]+f[i-2]; //每个月的兔子总数为前两个月兔子总数之和;
printf("%d\n",f[i]);
}
return 0;
}
第二种方法如下:
假设第一个月为f1,第二个月为f2,第三个月为f3,规律如下:
f1 | f2 | f3 |
1 | 1 | 2 |
1 | 2 | 3 |
2 | 3 | 5 |
3 | 5 | 8 |
#include<stdio.h>
int main()
{
int f1,f2,f3,n;
scanf("%d",&n); //输入月份;
f1=1; //第一个月为一对兔子;
f2=1; //第二个月为一对兔子;
f3=f1+f2; //第三个月兔子总数为第一个月与第二个月兔子之和;
printf("%d\n",f1);
printf("%d\n",f2);
while(n-->2)
{
printf("%d\n",f3);
f1=f2;
f2=f3;
f3=f2+f1;
}
return 0;
}