假设一对小兔的成长期为一个月,即一个月可长成成兔,那么,如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月就开始生兔子,试问从一对兔子开始繁殖,一年后能有多少对兔子
小兔子对数和大兔子对数构成两个相同的数列,不过小兔子对数数列向后推迟了一个月,因为上月有几对大兔子,这个月就应有几对小兔子+上个月小兔子对数
每个月大兔子对数=上个月大兔子对数+上个月小兔子对数
综合上面两条有;每个月大兔子对数=前两个月大兔子对数之和.用fn表示第n个月大兔子的对数,于是依题意有
f1=1 (n=1)
f2=1 (n=2)
fn=fn-1+fn-2 (n>=3)
依次让n=1.,2,3
可求出每个月的兔子对数
1,2,3,5,8,13,21,34,55,89,144,233…
用数组实现
#include<stdio.h>
#define YEAR_MONTH 12
int main()
{
int f[YEAR_MONTH+1]={0,1,2};
int month;
for(month=3;month<YEAR_MONTH;month++)
{
f[month]=f[month-1]+f[month-2];
}
for(month=1;month<YEAR_MONTH;month++)
{
printf("%d\t",f[month]);
}
printf("\nsum=%d\n",f[YEAR_MONTH]);
return 0;
}
循环解决
#include<stdio.h>
int main(void){
int N;
scanf("%d",&N);
if(N==1) printf("1");
else{
int i,count,x1,x2,sum,x;
sum=2,x1=1,x2=1,x=0;
for(i=2;x2<N;i++){
x=x1+x2;
x1=x2;
x2=x;
}
printf("%d",i);
}
return 0;
}