ybt 1312:【例3.4】昆蟲繁殖
附加條件:該題結果可以由long long類型表示
該題“每對成蟲過x個月產(chǎn)y對卵”這句有誤,實際應該為“每對成蟲過x個月每個月產(chǎn)y對卵”,一本通書第五版P215這道題就是這樣寫的。OJ抄錄時少了“每個月”三個字,導致理解困難。
【題目考點】 1. 遞推 【解題思路】首先要理解題意
該題中指說的蟲無論是題目還是結果,都是以“對”為單位的,不涉及“一對是兩個”這種換算。
我們認為將蟲子分為三種形態(tài):卵,幼蟲(不能產(chǎn)卵),成蟲(可以產(chǎn)卵)
題目中每對卵要過2個月長成成蟲,每對成蟲過x個月每個月產(chǎn)y對卵這句話應該這樣理解:
假設這句話中x為3,y為1,我們可以假定有以下具體場景
一對成蟲在1月初產(chǎn)了一對卵,這對卵過2個月,在3月初變?yōu)橐粚τ紫x,再過3個月(也就是x個月),在6月初變?yōu)橐粚Τ上x,這對成蟲在6月初產(chǎn)了一對卵。
這對新的卵過了2個月在8月初變?yōu)橛紫x,在11月初變?yōu)槌上x,并產(chǎn)卵。
我們把不能產(chǎn)卵的蟲稱為幼蟲,這樣更方便理解。
設數(shù)組a與b,a[i]表示第i個月有多少對蟲,b[i]表示第i個月出生的卵的數(shù)量。
假設x是3,寫出具體例子理解一下:
1月初有一對剛剛從卵變成的幼蟲,3個月(也就是x個月后)在4月初這對幼蟲變?yōu)槌上x,并產(chǎn)卵。
幼蟲在x個月后,也就是第x+1月才能開始產(chǎn)卵。那么前x個月只有一對蟲,對所有i滿足
1
≤
i
≤
x
1\le i\le x
1≤i≤x,有a[i]=1,b[i]=0
。
a[i-1]
。b[i-2]
,所以這部分幼蟲的數(shù)量為b[i-2]
。a[i] = a[i-1] + b[i-2];
a[i-x]
。b[i] = a[i-x]*y
。a[z+1]
#includeusing namespace std;
int main()
{long long a[101], b[101];//a[i]:第i個月有多少對蟲 b[i]:第i個月出生的卵的數(shù)量
int x, y, z;
cin >>x >>y >>z;
for(int i = 1; i<= x; i++)//前x個月只有第一對幼年蟲
{a[i] = 1;
b[i] = 0;
}
for(int i = x + 1; i<= z + 1; i++)//求第z個月后,即第z+1個月
{b[i] = a[i-x]*y;
a[i] = a[i-1]+b[i-2];
}
cout<< a[z+1]<< endl;
return 0;
}
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧