藍橋杯訓練--母牛的故事(很清晰的思路)

撐一支長篙~去追夢發表於2019-01-29

題目描述

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

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

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

樣例輸入
2
4
5
0
樣例輸出
2
4
6

解題思路:

這是一個持續生產類的問題,斐波那契數列剛好可以應用這種情況。本題的關鍵步驟是:第i年動物的總數等於前一年的動物總數加上前一年可在下一年生產的動物總數之和。

斐波那契表示為
1.當i<5時 A[i]=i;
2.當i>=5時 A[i]=A[i-1]+A[i-3]( 第i年動物的總數= 前一年的動物總數+ 前一年種可在下一年進行生產的動物總數)

**

注意事項:

**
不要用遞迴,遞迴時間無比之長,用斐波那契的性質運用在陣列之上即可

參考程式碼:


#include <stdio.h>

#include <stdlib.h>

int cow(int n); 

int main()

 {

 	long int A[55],i,n;

 	A[0]=0;

 	for(i=1;i<55;i++)

 	{	if(i<5)

 	A[i]=i;//先求出前4個的值 

else A[i]=A[i-1]+A[i-3];//關鍵步驟   第i年動物的總數= 前一年的動物總數+ 前一年可在下一年生產的動物總數

}

while(scanf("%d",&n)!=EOF&&n)

{

if(n>0&&n<55)printf("%d\n",A[n]);

else return 0;

}

return 0;

}

總結:

對於這類傳代持續生產類問題,可套用如下模板:

1.當i<k+1時,A[i]=i;
2.當i>=k+1時,A[i]=A[i]+A[i-k-1];

其中的k為傳代生產所需要的年數,如題目中k=4,此類題型總結到此。

編後語:

寫博分享,是希望促進彼此一起進步,如有錯誤,歡迎評論指正。如果讀者朋友覺著我的此篇部落格還行,請點個贊,以激勵我。謝謝各位讀者朋友的閱讀。

相關文章