1. 程式人生 > >小白的專欄

小白的專欄

古典問題:有一對兔子,從出生後第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

=n+m 總計:2n+2m+l 第x+2個月:同理得: ax+1=n+m+l,bx+11=n+m,cx+1=n+m+l 總計:3n+3m+2l

再進行簡化,可以把每月的兔子分為可生育和不可生育的兔子,這樣問題就又簡化了。

當然,此題最簡單的思路是生育問題,只需明白,可生育的兔子的數量是來自上上個月即可。這樣,下個月的兔子數量就是上個月兔子數加上上上個月的兔子數。