Problem L

Time Limit : 2000/1000ms (Java/Other)   Memory Limit :65536/32768K (Java/Other)

Total Submission(s) : 3   Accepted Submission(s) : 1

Problem Description

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

 

 

Input

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

 

 

Output

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

 

 

Sample Input

2

4

5

0

 

 

Sample Output

2

4

6

算法分析:

找规律的题,先列列:

递推 Problem L:母牛的故事(HDU 2018)_其他

在4往后就能明显的看到(代码讲述)。

代码实现:

#include<bits/stdc++.h>
using namespace std;
int main()
{

   int n,k,i;
   while(scanf("%d",&n)!=-1&&n)
    {
        int a,b,c,d;//a,b,c,d分别代表1,2,3,母牛数量
        if(n<=4)  cout<<n<<endl;
        else
        {

          n=n-4;
          //n=5时初始化
          a=2;
          b=c=1;
          d=2;

        for(i=1;i<n;i++)
        {
          d=c+d;
          c=b;
          b=a;
          a=d;//规律所得
        }
        cout<<a+b+c+d<<endl;
        }

    }
    return 0;
}

递推规律:

#include<bits/stdc++.h>
using namespace std; 
typedef long long ll;
int main(){
	int n;
	int f[100];
	for(int i=1;i<=4;i++)
		f[i]=i;
	for(int i=5;i<=60;i++)
	{
		f[i]=f[i-1]+f[i-3];
	}
	
	while(scanf("%d",&n)!=EOF)
	{
	 if(n==0)  break;
	 
	 cout<<f[n]<<endl;
	}
	return 0;
}