题目:有一头母牛,从出生的第4年起,在每年年初生一头小母牛,每头小母牛从第4年起,每年年初也生一头小母牛。问从第一头母牛生第一头小母牛算起,到第20年时,牛的头数共有多少(假定每头母牛都恰好存活15年)。
分析:这是一个典型的类Fibonacci数列问题,在解决问题时注意增加的母牛数量和是否有母牛死亡就可以了。
#include <iostream>
using namespace std;
void main( void)
{
int cow=1, year=1,addCow=0,dieCow[15],countCow[21]={0,2,3,4};
for( int i=0;i<15;i++) //初始化每年死的母牛;
dieCow[i]=0;
for( int j=4;j<=20;j++) //初始化第几年的母牛总数;
countCow[i]=0;
for(year=4;year<=20;year++)
{
if(year<16)
countCow[year]=countCow[year-3]+countCow[year-1];
else
countCow[year]=countCow[year-3]+countCow[year-1]-countCow[year-15];
}
for( int k=1;k<=20;k++)
{
if(k<16)
cout<< "第"<<k<< "年死去的母牛数为:"<<dieCow[k]<< ";";
else
cout<< "第"<<k<< "年死去的母牛数为:"<<countCow[k-15]<< ";";
cout<< "第"<<k<< "年的母牛总数为:"<<countCow[k]<<endl;
}
}
using namespace std;
void main( void)
{
int cow=1, year=1,addCow=0,dieCow[15],countCow[21]={0,2,3,4};
for( int i=0;i<15;i++) //初始化每年死的母牛;
dieCow[i]=0;
for( int j=4;j<=20;j++) //初始化第几年的母牛总数;
countCow[i]=0;
for(year=4;year<=20;year++)
{
if(year<16)
countCow[year]=countCow[year-3]+countCow[year-1];
else
countCow[year]=countCow[year-3]+countCow[year-1]-countCow[year-15];
}
for( int k=1;k<=20;k++)
{
if(k<16)
cout<< "第"<<k<< "年死去的母牛数为:"<<dieCow[k]<< ";";
else
cout<< "第"<<k<< "年死去的母牛数为:"<<countCow[k-15]<< ";";
cout<< "第"<<k<< "年的母牛总数为:"<<countCow[k]<<endl;
}
}
转载于:https://blog.51cto.com/pauloy/93825