1312:【例3.4】昆蟲繁殖(遞推算法)


每對成蟲過x個月產y對卵,每對卵要過兩個月長成成蟲。假設每個成蟲不死,第一個月只有一對成蟲,且卵長成成蟲后的第一個月不產卵(過X個月產卵),問過Z個月以后,共有成蟲多少對?0≤X≤20,1≤Y≤20,X≤Z≤50。

在這里其實,只知道是類似斐波拉契數列的一類的遞推公式,也就是經典的兔子問題。

  第i天的兔子=第i-1的兔子+第i-2的兔子

       

那么這道題的思路也是類似的,其實因為每個蟲子從幼蟲到成蟲要2個月,也就是說,決定第i個月的成蟲數量應該是i-1的成蟲和i-2的幼蟲(因為經過2個月就變成成蟲了。)那么,第i個月的幼蟲,應該是由第i - z個月的成蟲決定的。同時,我們還需要知道一個遞推公式,一定會有一個首項,那就是第一個月只有1對成蟲。

更多的分析在代碼里:

#include<iostream>
#include<cstdio>
using namespace std;
#define ll long long
int x, y, z;
ll a[55], b[55];
int main(){
    scanf("%d%d%d", &x, &y, &z);
    for (int i = 1; i <= x; ++i)
        a[i] = 1, b[i] = 0;            //第一個x月的成蟲數量
    for (int i = x + 1; i <= z + 1; ++i)
    {
        b[i] = y*a[i - x];        //在i月的幼蟲只與i-z月前的成蟲有關
        a[i] = a[i - 1] + b[i - 2];//第i個月的成蟲只與i-1的成蟲和i-2的幼蟲有關。
    }
    printf("%lld\n", a[z + 1]);//過了z個月
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM