藍橋杯訓練--母牛的故事(很清晰的思路)
題目描述
有一頭母牛,它每年年初生一頭小母牛。每頭小母牛從第四個年頭開始,每年年初也生一頭小母牛。請程式設計實現在第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,此類題型總結到此。
編後語:
寫博分享,是希望促進彼此一起進步,如有錯誤,歡迎評論指正。如果讀者朋友覺著我的此篇部落格還行,請點個贊,以激勵我。謝謝各位讀者朋友的閱讀。
相關文章
- 藍橋杯訓練2
- 藍橋杯--演算法訓練演算法
- 藍橋杯—演算法訓練演算法
- 藍橋杯:入門訓練 Fibonacci數列
- 藍橋杯 (java)演算法訓練 數對Java演算法
- [藍橋杯][演算法訓練VIP]方格取數演算法
- 藍橋杯 演算法訓練 素因子去重(Java)演算法Java
- 藍橋杯 演算法訓練 操作格子 (線段樹)演算法
- [Java] 藍橋杯ALGO-117 演算法訓練 友好數JavaGo演算法
- 【藍橋杯】練習題目彙總
- 藍橋杯注意的地方
- 藍橋杯
- 藍橋杯練習系統題目集
- 母牛的故事 hd 2018
- 藍橋杯——查詢的妙趣
- 【藍橋杯練習--二分】789. 數的範圍
- 藍橋杯:基礎練習 查詢整數
- 藍橋杯-買不到的數目
- 藍橋杯——特別數的和
- 藍橋杯-分巧克力
- 藍橋杯-N皇后
- 藍橋杯真題
- 藍橋杯 買瓜
- 藍橋杯 剪格子
- 藍橋杯基礎練習-找出唯一成對的數
- [藍橋杯][基礎練習VIP]矩形面積交
- 藍橋杯練習試題程式碼及講解
- 2024SMU藍橋訓練2補題
- 藍橋杯——想不到的位運算
- 藍橋杯-長草(BFS)
- 藍橋杯-日期問題
- 藍橋杯-帶分數
- 藍橋杯-翻硬幣
- 藍橋杯-座次問題
- 藍橋杯 計算方程
- 藍橋杯-螞蟻感冒
- 藍橋杯-排列序數
- 如何準備藍橋杯