d261 - 11000 - Bee
題目描述
題目描述了一種特殊的蜜蜂繁殖方式,要求計算在 N 年後公蜂和所有蜜蜂的數量。母蜂永生且每年生一隻公蜂,公蜂生一隻公蜂和一隻母蜂後死亡。
解題思路
這道題可以看作是一個變形的費氏數列問題。設 b[n] 表示第 n 年的公蜂數量,c[n] 表示第 n 年的母蜂數量,total[n] 表示第 n 年所有蜜蜂的數量。
- 第 0 年:
b[0] = 0,c[0] = 1,total[0] = 1 - 第 n 年:
- 母蜂每年生一隻公蜂,所以公蜂數量增加 1。
- 第 n-1 年的公蜂生一隻公蜂和一隻母蜂,所以公蜂數量增加
b[n-1],母蜂數量增加b[n-1]。 - 因此,
b[n] = b[n-1] + 1,c[n] = c[n-1] + b[n-1],total[n] = b[n] + c[n]。 程式碼中,b儲存的是b[n-1],c儲存的是c[n-1],c2儲存的是total[n-1]。迴圈計算b[n]和c[n],最後輸出b[n]和total[n]。
複雜度分析
- 時間複雜度: O(n)
- 空間複雜度: O(1)
程式碼
#include <iostream>
using namespace std;
int main(){
int a;
while(cin >> a){
if(a<0)break;
long long int b=0,c=1,c2=1;
while(a--){
c=b+c2+1;
b=c2;
c2=c;
}
cout << b << " " << c << "\n";
}
}