一个农场有头母牛,现在母牛才一岁,要到四岁才能生小牛,四岁之后,每年生一头小牛。假设每次生的都是母牛,并且也遵守4年才能生育并生母牛的原则,并且无死亡,请问N年后共有过少头牛?
看到这个题目的时候 猛地想笑,这没有公牛,母牛能生小牛吗? 呵呵 不过这也仅仅是个问题而已 废话少说,开始正题。其实这是一类经典的题目,早在接触C语言的时候就有这种类型的题目,不过说的是兔子,在此小弟也将那个问题搬来了,做个参考:
有一兔子,从出生后第3个月起每个月都生一兔子。小兔子长到第3个月后每个月又生一兔子。假设所有兔子都不死,问每个月的兔子总是为多少?
可以从下表中看出兔子繁殖的规律:第几个月小兔子数中兔子数老兔子数兔子总数11001
20101
31012
41113
52125
63238
753513
…………………………
可以看到每个月的兔子总数依次为1,1,2,3,5,8,13……
C语言的解法如下:#include "stdio.h"
void main()
{
long int f1=1,f2=1;
int i;
for(i=1;i<=10;i++){ //前20天小鸡数
printf("%5d%5d",f1,f2);
if(i%2==0) printf("\n"); //四个数字一行
f1=f1+f2;
f2=f1+f2;
}
}
至于运行结果,有兴趣的盆友可以自己运行一下。
小鸡问题其实就是斐波那契数列,需要注意的是循环10次其实输出是20个数。
可以从下表中看出小牛繁殖的规律:第几年母牛第一阶段母牛第二阶段母牛第三阶段母牛生崽阶段母牛总数110001
201001
300101
410012
511013
611114
721126
832139
9432413
10643619
11964928
1213961341
………………………………
可以看到每个月的兔子总数依次为1,1,1,2,3,4,6,9,13,19,28,41……
规律:从第四个月开始=>母牛数为 n-1年+ n-3年的数量 a[i]=a[i-1]+a[i-3]#include "stdio.h"
void main()
{
int i,a[21];
a[1]=a[2]=a[3]=1;
for(i=4;i<=20;i++){
a[i]=a[i-1]+a[i-3];
}
printf("%d ",a[20]);
}
看到这个问题头都大了,这个该怎么算,百度后发现列个表,很快就能找到数据,学好数学真的有用!