25 繁殖問題
作者: 孫辭海 時間限制: 1S章節: 一維數組
問題描述 :
有一家生化所,一月份引入一對新生的小白鼠。這對小白鼠生長兩個月後,在第三、第四、第五個月各繁殖一對新小白鼠,在第六個月停止繁殖,在第七個月則死亡。新生的小白鼠也如此繁殖。問在第N個月時,活的小白鼠有多少對?
輸入說明 :
你的程序需要從標準輸入設備(通常爲鍵盤)中讀入多組測試數據。每組輸入數據由一行組成,其中只有一個整數N(0 < N ≤ 50)。兩組輸入數據間無空行。
輸出說明 :
對於每組測試數據,你的程序需要向標準輸出設備(通常爲啓動該程序的文本終端)輸出一行,其中只有一個整數,即第N個月時活的小白鼠有幾對,所有數據前後沒有多餘的空行,兩組數據之間也沒有多餘的空行。
輸入範例 :
1
2
3
4
5
6
7
8
30
輸出範例 :
1
1
2
3
5
7
10
15
67066
這道題剛開始的時候想多了,以爲沒規律……
代碼:
/*
T25 繁殖問題
算法概述:每月的小白鼠數量=往前一個月的+往前3~5個月新出生的-本月死亡的(
也就是往前7個月的新出生的)
*/
#include<stdio.h>
#define MAX_SIZE 52
int main() {
int N = 0;
int i = 0, j = 0;
int preBorn = 0;// 前3~5個月新出生的
int cur[MAX_SIZE] = {0, 1, 1, 2, 3, 5, 7, 10, 15};// 本月小白鼠數量
int newBorn[MAX_SIZE] = {0, 0, 0, 1, 1, 2, 2, 4, 5};// 本月新生小白鼠數量
for (i = 9; i <= 50; i++) {// 從第9個月開始,因爲第8個月是特殊情況
preBorn = 0;
for (j = i - 4; j <= i - 2; j++)
preBorn += newBorn[j];
cur[i] = cur[i - 1] + preBorn - newBorn[i - 6];
newBorn[i] = preBorn;// 本月新生的
}
while (scanf("%d", &N) != EOF) {
printf("%d\n", cur[N]);
}
return 0;
}