習題4-11 兔子繁衍問題 (15 分)(遞迴演算法)(陣列演算法)
阿新 • • 發佈:2018-12-31
一對兔子,從出生後第3個月起每個月都生一對兔子。小兔子長到第3個月後每個月又生一對兔子。假如兔子都不死,請問第1個月出生的一對兔子,至少需要繁衍到第幾個月時兔子總數才可以達到N對?
輸入格式:
輸入在一行中給出一個不超過10000的正整數N。
輸出格式:
在一行中輸出兔子總數達到N對最少需要的月數。
輸入樣例:
30
輸出樣例:
9
兔子兩個月後就可以生一對(第一對兔子在第三個月時已經生了一對了)
#include<stdio.h>
int main()
{
int i,a[100],n;
a[1]=1,a[2]=1;
scanf("%d",&n);
i= 2;
while(a[i]<n)
{
a[i+1]=a[i]+a[i-1];//也可以使用多個變數代替因為每個資料都只使用一次,無需儲存。
i++;
}
if(i!=2)
printf("%d",i);
else
printf("1");
return 0;
}
遞迴演算法
#include<stdio.h>
int d(int m);
int main()
{
int n,m=25;
scanf("%d",&n);
while(1)
{
if(d(m)<n)//得出最接近n但小於n的月數
{
printf("%d",m+ 1);//因為m是最接近n的月數,所以m+1就是正確答案。
break;
}
else d(m--);}
return 0;
}
int d( int m)
{
if(m==1||m==2)
return 1;
else
{
m=d(m-1)+d(m-2);
return m;}
}
遞迴:從最終結果開始計算,構思計算到開頭;
迴圈:從開頭計算到最終結果;
能用遞迴計算的問題也可以用迴圈計算(利用陣列或多個變數)。