蓝桥杯—母牛的故事

来源:互联网 发布:6s邮件126的smtp端口 编辑:程序博客网 时间:2024/05/22 12:57

蓝桥杯—母牛的故事

时间限制: 1Sec 内存限制: 128MB

题目描述
  有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

输入
  输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(n最小是0,最大是55),含义如题目中描述。n=0表示输入数据的结束,不做处理。

输出
  对于每个测试实例,输出在第n年的时候母牛的数量。每个输出占一行。

样例输入
  2
  4
  5
  0

样例输出
  2
  4
  6


分析

/*    年份  母牛数量     1     i = 1     2     i+i1 = 2     3     i+i1+i2 = 3     4     i+i1+i2+i3 = 4     5     i+i1+i2+i3+i4+i11 =  6     6     i+i1+i2+i3+i4+i5+i11+i12+i21 = 9     .     .     .     .    最初的母牛起名为i    i生的小牛起名为i1,i2,i3,i4    in生的小牛起名为in1,in2,in3    ...    ...    规律,从第五年开始,每一年等于(前一年)加上(前三年)的数量*/

参考程序

//数组方法#include <iostream>using namespace std;void main(void){    int n;    int sum[56] = {0,1,2,3,4};    for(int i = 5;i<=55;i++)    {        sum[i] = sum[i-1]+sum[i-3];//提前将所有的值全部计算出来    }    while(cin>>n&&n!=0)//重点,输入n,同时判断输入的n是否为0,类似于c语言的(scanf("%d",&n)!=0)    {        cout<<sum[n]<<endl;    }}
//递归方法 这种方法一般会超时,不建议#include <iostream>using namespace std;int fun(int n);void main(void){    int n;    while(cin>>n&&n!=0)    {        cout<<fun(n)<<endl;    }}int fun(int n){    if(n<=4)    {        return n;    }    else    {        return fun(n-1)+fun(n-3);    }}
//迭代方法#include <iostream>using namespace std;void main(void){    int n;    int f1,f2,f3,fn;    while(cin>>n&&n!=0)    {        f1 = 1;        f2 = 2;        f3 = 3;        if(n<=3)        {            cout<<n<<endl;        }        else        {            for(int i = 4;i <= n;i++)            {                fn = f3 + f1;                f1 = f2;                f2 = f3;                f3 = fn;            }            cout<<fn<<endl;        }    }}

总结

此题类似于斐波那契数列,进行了变形

原创粉丝点击