兔子生崽问题(复习!)

假设一对小兔的成长期为一个月,即一个月可长成成兔,那么,如果每对成兔每个月都可以生一对小兔,一对新生的小兔从第二个月就开始生兔子,试问从一对兔子开始繁殖,一年后能有多少对兔子
在这里插入图片描述

小兔子对数和大兔子对数构成两个相同的数列,不过小兔子对数数列向后推迟了一个月,因为上月有几对大兔子,这个月就应有几对小兔子+上个月小兔子对数
每个月大兔子对数=上个月大兔子对数+上个月小兔子对数
综合上面两条有;每个月大兔子对数=前两个月大兔子对数之和.用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;
} 

猜你喜欢

转载自blog.csdn.net/yang8627/article/details/83027866
今日推荐