一對兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,至少需要繁衍到第幾個月時兔子總數纔可以達到N對?
輸入格式:
輸入在一行中給出一個不超過10000的正整數N。
輸出格式:
在一行中輸出兔子總數達到N最少需要的月數。
輸入樣例:
30
輸出樣例:
9
列表分析:
第1個月 | 第2個月 | 第3個月 | 第4個月 | 第5個月 | 第6個月 | 第7個月 | 第8個月 | 第9個月 | 第10個月 |
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
1 | 1 | 1 | 1 | 1 | 1 | ||||
1 | 1 | 1 | 1 | 1 | |||||
1+1=2 | 1+1=2 | 1+1=2 | 1+1=2 | ||||||
1+1+1=3 | 1+1+1=3 | 1+1+1=3 | |||||||
1+1+1+2=5 | 1+1+1+2=5 | ||||||||
1+1+1+2+3=8 | |||||||||
1 | 1 | 2 | 3 | 5 | 8 | 13 | 21 | 34 | 55 |
由表可知,S(1)=1, S(2)=1, S(3)=2=S(1)+S(2), 以此類推,S(n)=S(n-1)+S(n-2),式中n表示第n個月,S表示兔子的總數。
此題解法:
要求輸入S的值,求n的值。
#include <stdio.h>
/*
N -- 給定兔子總數
S -- 當前兔子總數
n -- 第n個月
temp -- 中間量
*/
int main(void)
{
int N;
scanf("%d", &N);
int n = 1;
int S = 1;
int temp = 0;
while ( S < N )
{
n++;
if ( n == 2 )
{
S += temp;
temp = S;
}
else
{
S += temp;
temp = S - temp;
}
}
printf("%d\n", n);
return 0;
}