溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言怎么解決兔子產(chǎn)子問題

發(fā)布時(shí)間:2022-03-19 14:05:46 來(lái)源:億速云 閱讀:284 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“C語(yǔ)言怎么解決兔子產(chǎn)子問題”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“C語(yǔ)言怎么解決兔子產(chǎn)子問題”吧!

1. 問題描述

有一對(duì)兔子,從出生后的第 3 個(gè)月起每個(gè)月都生一對(duì)兔子。

小兔子長(zhǎng)到第 3 個(gè)月后每個(gè)月又生一對(duì)兔子,假設(shè)所有的兔子都不死,問 30 個(gè)月內(nèi)每個(gè)月的兔子總數(shù)為多少?

C語(yǔ)言怎么解決兔子產(chǎn)子問題

2. 題目分析

這是一個(gè)有趣的古典數(shù)學(xué)問題,我們畫一張表來(lái)找一下兔子數(shù)的規(guī)律吧

C語(yǔ)言怎么解決兔子產(chǎn)子問題

Tip:不滿 1 個(gè)月的兔子為小兔子,滿 1 個(gè)月不滿 2 個(gè)月的為中兔子,滿3個(gè)月以上的為老兔子。

可以看出,每個(gè)月的兔子總數(shù)依次為 1,1,2,3,5,8,13…這就是 Fibonacci數(shù)列。

總結(jié)數(shù)列規(guī)律:即從前兩個(gè)月的兔子數(shù)可以推出第 3 個(gè)月的兔子數(shù)。

3. 算法設(shè)計(jì)

該題目是典型的迭代循環(huán),即是一個(gè)不斷用新值取代變量的舊值,然后由變量舊值遞推出變量新值的過程。

這種迭代與如下因素有關(guān):初值、迭代公式、迭代次數(shù)。經(jīng)過問題分析,算法可以描述為:

C語(yǔ)言怎么解決兔子產(chǎn)子問題

用C語(yǔ)言來(lái)描述選代公式即為fib=fibl+fib2。

其中 fib 為當(dāng)前新求出的兔子數(shù)。

fib1 為前一個(gè)月的兔子數(shù)。

fib2 中存放的是前兩個(gè)月的兔子數(shù),然后為下一次選代做準(zhǔn)備。

C語(yǔ)言怎么解決兔子產(chǎn)子問題

進(jìn)行如下的賦值fib2=fib1,fib1=fib,要注意賦值的次序,選代次數(shù)由循環(huán)變量控制,表示所求的月數(shù)。

4. 代碼實(shí)現(xiàn)

完整代碼

#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;
}

運(yùn)行結(jié)果

C語(yǔ)言怎么解決兔子產(chǎn)子問題

代碼解釋

C語(yǔ)言怎么解決兔子產(chǎn)子問題

5. 算法升級(jí)

這個(gè)程序雖然是正確的,但可以進(jìn)行改進(jìn)。

目前用 3 個(gè)變量來(lái)求下一個(gè)月的兔子數(shù),其實(shí)可以在循環(huán)體中一次求出下兩個(gè)月的兔子數(shù),就可以只用兩個(gè)變量來(lái)實(shí)現(xiàn)。

這里將fib1+fib2 的結(jié)果不放在 fib 中,而是放在 fib1 中,此時(shí) fib1 不再代表前一個(gè)月的兔子數(shù),而是代表最新一個(gè)月的免子數(shù)。

再執(zhí)行fib2=fib1+fib2,由于此時(shí) fib1 中已經(jīng)是第 3 個(gè)月的兔子數(shù)了,因此 fib2 中就是第 4 個(gè)月的兔子數(shù)了。

可以看出,此時(shí) fib1 和 fib2 均為最近兩個(gè)月的兔子數(shù),循環(huán)可以推出下兩個(gè)月的兔子數(shù)。

改進(jìn)程序如下

#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語(yǔ)言怎么解決兔子產(chǎn)子問題

到此,相信大家對(duì)“C語(yǔ)言怎么解決兔子產(chǎn)子問題”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI