藍橋杯訓練--母牛的故事(很清晰的思路)
題目描述
有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請程式設計實現在第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,此類題型總結到此。
編後語:
寫博分享,是希望促進彼此一起進步,如有錯誤,歡迎評論指正。如果讀者朋友覺著我的此篇部落格還行,請點個贊,以激勵我。謝謝各位讀者朋友的閱讀。
相關文章
- 藍橋杯—演算法訓練演算法
- 藍橋杯--演算法訓練演算法
- 藍橋杯 (java)演算法訓練 數對Java演算法
- 演算法訓練 字首表示式 (藍橋杯)演算法
- 藍橋杯:入門訓練 Fibonacci數列
- [藍橋杯][演算法訓練VIP]方格取數演算法
- 藍橋杯 演算法訓練 素因子去重(Java)演算法Java
- 藍橋杯 演算法訓練 操作格子 (線段樹)演算法
- 藍橋杯 演算法訓練 K好數(Java解題)演算法Java
- [Java] 藍橋杯ALGO-117 演算法訓練 友好數JavaGo演算法
- 藍橋杯練習系統題目集
- 藍橋杯 排序排序
- 藍橋杯——查詢的妙趣
- 藍橋杯-串的處理
- 藍橋杯:基礎練習 查詢整數
- 藍橋杯 【基礎練習】 特殊迴文數
- 藍橋杯 演算法訓練 區間k大數查詢 (Java解題)演算法Java
- 藍橋杯-N皇后
- 藍橋杯真題
- 藍橋杯-買不到的數目
- [藍橋杯][基礎練習VIP]矩形面積交
- 藍橋杯練習試題程式碼及講解
- 藍橋杯基礎練習-找出唯一成對的數
- 藍橋杯年號字串字串
- 藍橋杯-帶分數
- 藍橋杯-翻硬幣
- 藍橋杯-螞蟻感冒
- 藍橋杯 計算方程
- 藍橋杯-座次問題
- 藍橋杯-長草(BFS)
- 藍橋杯-日期問題
- 藍橋杯-班級活動
- 藍橋杯試題 基礎練習 特殊迴文數
- 問題 1462: [藍橋杯][基礎練習VIP]Huffuman樹
- 密碼脫落——藍橋杯密碼
- 藍橋杯-回形巢狀巢狀
- 藍橋杯-分巧克力
- 藍橋杯-k倍區間