您好,登錄后才能下訂單哦!
本篇內容主要講解“C語言怎么解決兔子產子問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“C語言怎么解決兔子產子問題”吧!
有一對兔子,從出生后的第 3 個月起每個月都生一對兔子。
小兔子長到第 3 個月后每個月又生一對兔子,假設所有的兔子都不死,問 30 個月內每個月的兔子總數為多少?
這是一個有趣的古典數學問題,我們畫一張表來找一下兔子數的規律吧
Tip:不滿 1 個月的兔子為小兔子,滿 1 個月不滿 2 個月的為中兔子,滿3個月以上的為老兔子。
可以看出,每個月的兔子總數依次為 1,1,2,3,5,8,13…這就是 Fibonacci數列。
總結數列規律:即從前兩個月的兔子數可以推出第 3 個月的兔子數。
該題目是典型的迭代循環,即是一個不斷用新值取代變量的舊值,然后由變量舊值遞推出變量新值的過程。
這種迭代與如下因素有關:初值、迭代公式、迭代次數。經過問題分析,算法可以描述為:
用C語言來描述選代公式即為fib=fibl+fib2。
其中 fib 為當前新求出的兔子數。
fib1 為前一個月的兔子數。
fib2 中存放的是前兩個月的兔子數,然后為下一次選代做準備。
進行如下的賦值fib2=fib1,fib1=fib,要注意賦值的次序,選代次數由循環變量控制,表示所求的月數。
完整代碼
#include <stdio.h> int main() { long fib1 = 1; long fib2 = 1; long fib = 0; int i = 0; printf("%12d%12d", fib1, fib2); for (i = 3; i <= 30; i++) { fib = fib1 + fib2; printf("%12d", fib); if (i % 4 == 0) { printf("\n"); } fib2 = fib1; fib1 = fib; } printf("\n"); return 0; }
運行結果
代碼解釋
這個程序雖然是正確的,但可以進行改進。
目前用 3 個變量來求下一個月的兔子數,其實可以在循環體中一次求出下兩個月的兔子數,就可以只用兩個變量來實現。
這里將fib1+fib2 的結果不放在 fib 中,而是放在 fib1 中,此時 fib1 不再代表前一個月的兔子數,而是代表最新一個月的免子數。
再執行fib2=fib1+fib2,由于此時 fib1 中已經是第 3 個月的兔子數了,因此 fib2 中就是第 4 個月的兔子數了。
可以看出,此時 fib1 和 fib2 均為最近兩個月的兔子數,循環可以推出下兩個月的兔子數。
改進程序如下
#include <stdio.h> int main() { long fib1 = 1, fib2 = 1; int i = 0; for (i = 1; i <= 15; i++) { printf("%12d%12d", fib1, fib2); if (i % 2 == 0) { printf("\n"); } fib1 = fib1 + fib2; fib2 = fib1 + fib2; } return 0; }
代碼解釋
到此,相信大家對“C語言怎么解決兔子產子問題”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。