18.12.09-C語言練習:兔子繁衍問題 / Fibonacci 數列


題目:

問題解析:

這是典型的/Fibonacci 數列問題。具體這里不贅述。

問題中不論是初始的第1對兔子還是以后出生的小兔子都是從第3個月齡起每個月各生一對兔子。

設n1,n2,n3分別是每個月1個月月齡,2個月月齡,大於等於3個月月齡的兔子數量。則下個月這三個類型月齡兔子數量分別是 n3, n1, n3+n2。

即:下個月1個月月齡兔子數量是上個月大於等於3個月月齡兔子的數量,2個月月齡兔子數量是上個月1個月月齡兔子數量,大於等於3個月月齡兔子數量是上個月大於等於3個月月齡兔子數量加上上個月2個月月齡兔子數量。

程序:

 1 #include <stdio.h>
 2 int main(void) {
 3     /*n1, n2, n3 分別是有1個月月齡,2個月月齡,3個月月齡的兔子數量*/
 4     int n1 = 1, n2 = 0, n3 = 0;
 5     /*total 是兔子總數量*/
 6     int total = 0; 
 7     /* i 是月份, num是輸入變量, t是中間變量 */
 8     int i=1, num, t;
 9     printf("請輸入數量:");
10     scanf("%d", &num);
11     while(1){
12         total = n1 + n2 + n3;
13         if(total >= num) break;  
14         /*求下個月兔子數量*/
15         i += 1;
16         /*下面四行語句注意順序不能混亂*/
17         t = n1;
18         n1 = n3 + n2;
19         n3 += n2;
20         n2 = t;
21     }
22     printf("所需月數:%d\n", i);
23     return 0;
24 }

程序執行結果:

 

問題表述中可能不嚴謹的地方:

1. 第一對兔“第3個月起”, 新生兔子“第3個月后”。不夠嚴謹,因為月是一個時間段,應統一理解為“三個月后”。上述程序也是這么理解的。

2. “第幾個月時兔子總數才可以達到n對?”。似乎有歧義:剛好達到n對還是大於等於n對。上述統一理解為“大於等於n對”。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM