小白的專欄
阿新 • • 發佈:2018-12-17
古典問題:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少? 分析:兔子的規律為數列1,1,2,3,5,8,13,21…
#include <stdio.h> #include <stdlib.h> int main() { int f1,f2,f,m,n; f1=0;f2=1; printf("請輸入月份數:"); scanf("%d",&m); for(n=1;n<=m;n++) { if(n==1)f2=1; else {f=f2;f2=f1+f2;f1=f;} } printf("第%d個月有%d對雞",m,f2); return 0; }
感悟:分析題目時,角度不一樣,難度也不一樣。原始分析思路是:將每月的兔子分為三類:當月生產的a,已生了一月的b,大於兩月的c。之後在統計下個月的兔子數發生了什麼變化。此種思路的難點在於下個月後,每一個種類都發生了變化(由原當月生的變為已存在一個月的n0變為n1),同時還有有產出的兔子,再對每種兔子進行統計。 第x個月:設a種兔子l只,b種兔子m只,c種兔子n只;總計: l+m+n。 第x+1個月:a種兔子l只只兔子未增加,種類由a變為b,b種兔子m變為2m,對應種類變為c(m只)和a(m只),c種兔子n只b變為2n,對應種類變為c(n只)和a(n只)。再統計得: ax+1=n+m,bx+11=l,cx+1
再進行簡化,可以把每月的兔子分為可生育和不可生育的兔子,這樣問題就又簡化了。
當然,此題最簡單的思路是生育問題,只需明白,可生育的兔子的數量是來自上上個月即可。這樣,下個月的兔子數量就是上個月兔子數加上上上個月的兔子數。