母牛的故事(c/c++实现)

母牛的故事(c/c++实现)


母牛的故事

时间限制: 1Sec 内存限制: 128MB 提交: 17209 解决: 4590

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

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

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

样例输入
2
4
5
0
样例输出
2
4
6

本题以前学c语言的时候老师貌似给过这道题,印象不大深了。
刚拿到这道题就就像用递归,因为个人感觉递归不失为缩小此类问题的一个暴力的方法
本人愚钝,自己拿了个笔在纸上枚举了一下得到一个固定的公式:
假设第n年母牛的数量为 num(n),那么num(n)=num(n-1)+num(n-3)
大致意思就是:第n年母牛的数量就是上年的数量加上三年前母牛的数量(因为小牛的都在不断长大,而且所有的小牛都是母的 O(∩_∩)O)
递归可是会很慢的哟,突然想到老师说的一个数组记录的一个方法:用数组下标来表示第几年(我是从下标为1开始的)然后下标对应的元素是这一年的母牛数,这样就不用每调用一次都要跑一遍递归,需要的时候随时从数组中提取。

下面附上递归及数组记录方法的代码:

#include"iostream"
using namespace std;
int a[57];
int fun(int n){
    if(n<=4) 
        return n;
    else
        return fun(n-1)+fun(n-3);
        
}
int main(){
    int n;
    while(cin>>n){
        if(n==0) 
            break;
        else
            cout<<fun(n)<<endl;
    } 
    return 0;
}



#include"iostream"
using namespace std;
int a[57];
int main(){
    int n;
    a[1]=1;
    a[2]=2;
    a[3]=3;
    a[4]=4;
    while(cin>>n){
        if(n==0)
            break;
        else
            for(int i=5;i<=n;i++)
                a[i]=a[i-1]+a[i-3];
        cout<<a[n]<<endl;       
    }
    return 0;
}


猜你喜欢

转载自blog.csdn.net/qq_41634258/article/details/86500182