東華oj-進階題第25題-繁殖問題

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;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章