母牛的故事

母牛的故事

 

Problem Description

有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請編程實現在第n年的時候,共有多少頭母牛?

Input

輸入數據由多個測試實例組成,每個測試實例佔一行,包括一個整數n(0<n<55),n的含義如題目中描述。
n=0表示輸入數據的結束,不做處理。

Output

對於每個測試實例,輸出在第n年的時候母牛的數量。
每個輸出佔一行。

Sample Input

2
4
5
0

Sample Output

2
4
6

Author

lcy

Source

#include <iostream>
using namespace std;
int main()
{
	int i,n;
	int a[55]={0};//把a[0]置爲0
	while(cin>>n&&n!=0)
	{
		for(i=1;i<=n;i++)
		{
			if(i==1)//第一年只有第一隻母牛
				a[i]=1;
			else if(i==2)//第二年母牛+一隻小牛
				a[i]=2;
			else if(i==3)//第三年母牛又生了一隻小牛
				a[i]=3;
			else//當n>=4時,第1年a[i]等於前一年的母牛+第n-3年的母牛所生小牛
				a[i]=a[i-1]+a[i-3];
		}
		cout<<a[n]<<endl;
	}
	return 0;
}


補充:

/*
#include<stdio.h>
main()
{
int f[55]={1,1,2,3},n,i;
for(i=4;i<57;i++)
{
f[i]=f[i-1]+f[i-3];
}
while(scanf("%d",&n)!=EOF&&n!=0)
{
printf("%d\n",f[n]);
}
}
*/




/*對於一個問題,首先要學會分析。我們設在第n年有f(n)頭母牛,那麼該值有什麼有關? 
1)去年的母牛,只要沒有死,今年仍在因此有f(n-1)頭, 
2)今年出生的母牛有多少?大前年(第n-3年)有多少頭母牛,那麼到了今年這些牛都能生小牛了,因此出生數爲f(n-3). 
從而今年的母牛數爲f(n)=f(n-1)+f(n-3). 
開始時(即第1年)有多少頭母牛?它們處於什麼狀態(是可以生小母牛的,還是當生的小母牛,還是其它?)如果假定第1年只有一頭剛生小母牛,那麼f(1)=1,第2年有f(2)=1第3年有f(3)=1,從第4年開始這母牛生小牛了,有f(4)=2(恰好就是f(3)+f(1)) 
因此得到遞推公式:f(1)=f(2)=f(3)=1,f(n)=f(n-1)+f(n-3)(n>=4) 
如果第1年的母牛是能生小母牛的牛,那麼: 
f(1)=2,f(2)=3,f(3)=4,f(n)=f(n-1)+f(n-3)(n>=4) 
... 
不管開始情況如何,遞推公式f(n)=f(n-1)+f(n-3)(n>=4)總是對的,因此只要考慮初始狀態(要考慮3年的情況)
*/


 

發佈了58 篇原創文章 · 獲贊 30 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章