兔子繁衍問題(pat)斐波那契數列

引入

兔子繁衍問題。一對兔子,從出生後第 3 個月起每個月都生一對兔子。
小兔 子長到第 3 個月後每個月又生一對兔子。假如兔子都不死,請問第 1 個月出生的 一對兔子,至少需要繁衍到第幾個月時兔子總數纔可以達到 n 對?
輸入一個不超 過 10000 的正整數 n,輸出兔子總數達到 n 最少需要的月數

網上說:這個題有兩個爭議點(坑點),第一個點就是,是第三個月開始生兔子,還是第三個月後開始生兔子。第二個坑點是有的題目沒有指名總數是達到n只還是n對

正解:因爲這個題的目的是求斐波那契數列,所以就是第三個月開始生兔子,n對


分析

分析思路:看到題目相信大家都是懵的,讓我們來總結總結規律
第一個月:	2只兔子  
第二個月:	2只兔子
第三個月:	4只兔子(這裏是個坑,它說出生後的第三個月起每個月都生一對兔子,不是第三個月後生兔子,而是第三個月就開始生了)
第四個月:	6只兔子
第五個月:	10只兔子(第三個月的兔子也開始生兔子了,也就是4只兔子開始生兔子了)
第六個月:	16只兔子(第四個月生的兔子也開始生兔子了,也就是6只兔子開始生兔子了)
第七個月:	26只兔子(第五個月生的兔子也開始生兔子了,也就是8只兔子開始生兔子了)
第八個月:	42只兔子(第六個月生的兔子也開始生兔子了,也就是16只兔子開始生兔子了)
第九個月:	68只兔子 。。。
9個月的兔子對數 1、1、2、3、5、8、13、21、34... 
看到這就代表求的是斐波那契數列 ,我們找斐波那契數列規律就行了

斐波那契數列

百度百科:

斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖爲例子而引入,故又稱爲“兔子數列”,指的是這樣一個數列:1、1、2、3、5、8、13、21、34、……在數學上,斐波那契數列以如下被以遞推的方法定義:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N)在現代物理、準晶體結構、化學等領域,斐波納契數列都有直接的應用,爲此,美國數學會從 1963 年起出版了以《斐波納契數列季刊》爲名的一份數學雜誌,用於專門刊載這方面的研究成果。*

它的應用有很多比如:兔子繁衍問題、數字謎題、楊輝三角、黃金分割、矩形面積、自然界中的“巧合”、尾數循環等等,詳情可以進入百度百科看看


代碼

網上有兩種解法

while

#include<stdio.h>
int main(){
	
    /**
	1、1、2、3、5、8、13、21、34、……當作數列題來做 
	從第三項開始,每項等於前兩項的和 
	*/ 
	
	//輸入兔子對數 
	  int n; 
	  scanf("%d",&n);
	  
	//定義自變量moth,我們這是從第三項開始的,我們while(){}第一次循環求的就是第3個月的兔子對數 
	int month = 2;
	
	//定義a、b代表第一、二項,即前兩項 ,我們需要前兩項來求後一項的值
	int a = 1, b = 1;
	
	//定義item代表對數的變化量
	int item; 
	  
	//結束條件,當兔子對數>=n 
	  while(item<n){
		//得到後一項的值 
		item = a + b;
		//修改前兩項的值 
		a = b;
		b = item; 
		month++;
	 }
     printf("%d",month);
}

for

#include<stdio.h>
#define MAXN 1000
int main(){
    int n,m[MAXN],i;
    
    /**
	1、1、2、3、5、8、13、21、34、……當作數列題來做 
	從第三項開始,每項等於前兩項的和 
	*/ 
    
    //輸入需要的兔子對數 
    printf("Entry n:");
    scanf("%d",&n);
    
    /**
    第一種用for循環寫 
    */
    for(i=1;;i++){
    	
       //分段函數 
       if(i==1||i==2){
          m[i]=1;
       }else{
           m[i]=m[i-1]+m[i-2];
       }
       
       //結束條件 
       if(m[i]>=n){
        printf("%d",i);
        return 0;
       }
     
   }
}

運行測試

在這裏插入圖片描述
在這裏插入圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章