熱帶雨林的昆蟲繁殖題解

熱帶雨林的昆蟲繁殖


題目描述
科學家在熱帶森林中發現了一種特殊的昆蟲,這種昆蟲的繁殖能力很強。每對成 蟲過x個月產y對卵,每對卵要過兩個月長成成蟲。假設每個成蟲不死,且可以不停繁殖,第一個月只有一對成蟲,問過Z個月以後,共有成蟲多少對?

輸入格式
一行X,Y,Z用空格隔開,分別表示X個月產Y對卵,繁殖Z個月

1≤X≤20,1≤Y≤20,X≤Z≤39

輸出格式
Z月後,成蟲的對數。

樣例
樣例輸入
1 2 8
樣例輸出
37
數據範圍與提示
找出當月卵數量的遞推式和成蟲數量的遞推式。


精髓:

(1)首先定義兩個數組:

1.a數組表示該月新產出的卵;

2.b數組表示到現在一共的成蟲的數量

(2)尋找遞推式:

<1>b[i]=b[i-1]+a[i-2];

b[i-1]:第i-1月一共的成蟲。

a[i-2]:因爲卵兩個月長成成蟲,所以第i-2月產出的卵在i月剛好會變成成蟲。

兩個加起來即是i月一共的成蟲。

<2>a[i]=a[i-x]+(b[i-x]-b[i-x-1])y;

a[i-x]:每一個月有多少個卵,那麼這一個月對應着就有多少個成蟲去產下卵。所以,a[i-x]就相當於第i-x月成蟲的個數,這些成蟲到了第i月也會產下對應的卵。

(b[i-x]-b[i-x-1])*y:因爲一對卵兩個月長成成蟲,所以第i-1月的卵到了第i月仍是卵。"b[i-x]-b[i-x-1]"表示第i-x-1月到第i-x月增長的成蟲的個數,這些成蟲是由第i-x-3月產出的卵變化的,它們又會在第i-1月產卵,這些卵到了第i月還是卵。

參考代碼:

#include<cstdio>
int main() {
	int x,y,z;
	long long a[55]={},b[55]={};
	scanf("%d %d %d",&x,&y,&z);
	for(int i=1;i<=x;i++) {
		a[i]=1,b[i]=0;
	}
	a[x+1]=1,b[x+1]=y;
	for(int i=x+2;i<=z+1;i++) {
		a[i]=a[i-1]+b[i-2];
		b[i]=b[i-x]+(a[i-x]-a[i-x-1])*y;
	}
	printf("%lld",a[z+1]);
	return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章