类型:转载 责任编辑:asp 日期:2007/03/01
钱能的c++程序设计教程(p76页):
编程求解:若一头母牛,从出生起第四个年头开始每年生一头母牛,按此规律,第n年有多少头母牛?
算法:如下表(超过4岁的为老母牛)
年份 1岁母牛数 2岁母牛数 3岁母牛数 4岁母牛数 老母牛 总数
1 1 0 0 0 0 1
2 0 1 0 0 0 1
3 0 0 1 0 0 1
4 1 0 0 1 0 2
5 1 1 0 0 1 3
6 1 1 1 0 1 4
7 2 1 1 1 1 6
8 3 2 1 1 2 9
设第一年总母牛数为f1;第二年为f2;
依次不难看出:f4=f3+f1;f5=f4+f2;f6=f5+f3;f7=f6+f4;f8=f7+f5;等等
于是程序如下(求10年的数量):
#include<stdio.h>
main()
{
long int f1,f2,f3;
int i;
f1=f2=f3=1;
for(i=1;i<10;i++)
{printf("%16ld\n,%16ld\n,%16ld\n",f1,f2,f3);
f1=f1+f3;
f2=f2+f1;
f3=f3+f2;
}
}
程序运行结果:1 1 1 2 3 4 6 9 13 19 28 41 60 88 129 189 277 406 595 872 1278 1873
2745 4023 5896 8641 12664
-----------------------------------------------
上述的程序对否??有没有更好的算法解决这个问题???
推荐阅读
今年的头数等与去年加大前年?
也就是说大前年的头数等于去年大于等于四岁的头数?
有没有方法证明你的观点?
你理解很正确啊。
假设第n年,上一年生出小母牛的母牛今年会继续生出同样多的小母牛,所以+f(n-1)。同时3年前出生的小母牛长大了,今年开始生小母牛,所以+f(n-3);
即:f(n)=f(n-1)+f(n-3);