汝州司机最新招聘信息:一头奶牛出生后第四年开始生育一头小奶牛,以后每年生一头小奶牛。一头刚出小奶牛,20年后共有几头奶牛?

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/30 12:14:10
一头奶牛从出生后的第四年开始生育一头小奶牛,以后每年生育一头小奶牛。给你一头刚出生的小奶牛,20年后共有多少头奶牛?

1. 创建一个控制台程序Exercise01
2. 从控制台输入一个年份
3. 编写一个方法 int Count( int year),计算奶牛数

提示:建立第N年和第N+1年牛的数量之间的关系,建立递推公式。

小牛数随年数为:
1 1 1 2 3 4 5 7 10 14 19 26......
F(n) = F(n-1) + F( n-4) (n>=5)
= F(n-2) + F(n-5) +F(n-4)
= 2[F(n-3) + f(n-6)] +F(n-4) + F(n-5) (n>=6)
= 2F(n-4)+ F(n-5) +F(n-6) +F(n-7) (n>=7)
= 3F(n-5) +F(n-6) +F(n-7) +2F(n-8) (n>=8)
= ……
= (n-6)F(4) + (n-9) F(3) + (n-8) F(2) + (n-7)F(1) (n>9)
F(4) = 2 ; F(3) = 1 ; F(2) = 1 ; F(1) = 1 ;

写程序的话就很容易了

a母牛20年内可以生17只小牛
b第一只:16年时间 13只
c第一只:13年时间 9只
d第一只:10年时间:6只
e第一只:7年时间: 4只
f第一只:4年时间 1只
...
...
第六只:4年时间:1只
第二只:12 8
...
...
第九只:4 1只
第二只:15 12
第一只:12年时间 8
. 11


第十四只:1年 1只
以下的救生不出小牛了,呵呵
这样就可以计算出来了

知道了过程之后就可以编程序了,呵呵,如果不知道过程,也没法写公式啊!
呵呵
注:a:初始小母牛,b:a的下一代.......f:e的下一代
过程理解的比较乱,如果有更好的理解方式,请告诉我,谢谢,呵呵

/*
刚才写错了点,换个用户改下:
F(n) = F(n-1) + F( n-4) (n>4)
= F(n-2) + F(n-5) +F(n-4) (n>5)
= 2[F(n-3) + f(n-6)] +F(n-4) + F(n-5) (n>6)
= 2F(n-4)+ F(n-5) +F(n-6) +F(n-7) (n>7)
= 3F(n-5) +F(n-6) +F(n-7) +2F(n-8) (n>8)
= 4F(n-6) +F(n-7) +2F(n-8) +3F(n-9) (n>9)
= ……
= (n-6)F(4) + (n-9) F(3) + (n-8) F(2) + (n-7)F(1) (n>9)
F(4) = 2 ; F(3) = 1 ; F(2) = 1 ; F(1) = 1 ;
*/
int Count( int year)
{
const int f1=1,f2=1,f3=1,f4=2;
if (year < 1)
return 0;
else if (year == 1 || year == 2 || year == 3)
return 1;
else if (year == 4)
return 2;
else
return Count(year -1) + Count(year -4);
}

#include<iostream>
using namespace std;
int main ()
{cout<<"请输入要查询的年数\n";
int n, c=1;
cin>>n;
for(int i=4,a=1,b=1,temp;i<=n;i++)
{temp=a+c;
a=b;
b=c;
c=temp;
}
cout<<temp<<endl;
}