7-10 兔子繁衍问题 (15 分)
一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?
输入格式:
输入在一行中给出一个不超过10000的正整数N。
输出格式:
在一行中输出兔子总数达到N最少需要的月数。
输入样例:
30
输出样例:
9
这题是斐波那契数列的问题,图示:
month 1 2 3 4 5
num 1 1 2 3 5
题意其实我一直没有理解,但是它就是最简单的意思,兔子出生时,就已经算是一个月的了。
需要注意的是,我们对于数字一需要进行特判,如果是,那就输出一就可以了。
1 #include <cstdio> 2 #include <iostream> 3 typedef long long ll; 4 const int maxn=25; 5 int dp[maxn]; 6 7 int get(int N) 8 { 9 dp[1] = 1; 10 dp[2] = 1; 11 for (int i=3;i<maxn;i++) { 12 dp[i]=dp[i-1]+dp[i-2]; 13 if (dp[i]>=N) 14 return i; 15 } 16 } 17 18 int main() 19 { 20 int N; 21 scanf("%d",&N); 22 if (N==1) 23 printf("%d ", 1); 24 else 25 printf("%d ", get(N)); 26 system("pause"); 27 return 0; 28 }