B - 疯狂的母牛

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

Input

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

Output

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

Sample Input

2
4
5
0

Sample Output

2
4
6

此题实在是不容易记,我做了三遍了,最后还是要再推一遍方可ac,接下来就说一下基本思路。

其实这也是一道递归题目,此类题目就像是初中找规律一样,解题过程如下:

第一年 母牛1 小牛0;1

第二年 母牛1 小牛1;2

第三年 母牛1 小牛 2;3

第四年 母牛1 小牛 3;4

第五年 母牛2 小牛4;6

第六年 母牛3 小牛6;9

第七年 母牛4 小牛 9;13

第八年 母牛6 小牛13;19

……

是不是发现规律了呢?其实这道题关键需要理解的是何时统计牛的数量;以及小母牛何时成为母牛这个点,题中所述,第四年小母牛成为母牛,而统计母牛的数量则是在其之前所以第四年母牛有一头,小母牛则有三头。到此结束

规律如下:设总母牛数f(x),由上可知,小母牛有f(x-1)头,而母牛有g(x)头,g(x)又有如下规律:g(x)=g(x-1)+g(x-3);代码就出来了

#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
int a,b,c;
int fb(int i){
    if(i<=4){
        return 1;
    }
    int s=fb(i-1)+fb(i-3);
    return s;
}
int fa(int i){
    if(i==1) return 1;
    if(i==2) return 2;
    if(i==3) return 3;
    if(i==4) return 4;
    int f=fa(i-1)+fb(i);
    return f;
}
int main(){
    while(scanf("%d",&a)!=EOF&&a){
        b=fa(a);
        printf("%d\n",b);
    }
    return 0;
}

溜了……

猜你喜欢

转载自blog.csdn.net/liubang00001/article/details/81363067
B
a^b
A/B
A*B