2025-03-22 学习记录--C/C++-PTA 习题4-11 兔子繁衍问题

合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻

一、题目描述 ⭐️

习题4-11 兔子繁衍问题

一对兔子,从出生后第3个月起每个月都生一对兔子。小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,请问第1个月出生的一对兔子,至少需要繁衍到第几个月时兔子总数才可以达到N对?

输入格式:
输入在一行中给出一个不超过10000的正整数N。

输出格式:
在一行中输出兔子总数达到N最少需要的月数。

输入样例:

30

输出样例:

9

二、解题思路 ⭐️

1234567
对数11235813

除 第1个月 外,当前月的对数 = 前两个月的对数之和。👉🏻 斐波那契数列

三、代码(C语言)⭐️

/** 
* 斐波那契数列:
*    月:  1  2  3  4  5  6  7...
*    对数: 1  1  2  3  5  8  13...
*    除第1个月外,当前月的对数 = 前两个月的对数之和
*/
#include <stdio.h>  // 引入标准输入输出库,用于使用 scanf 和 printf 函数

int main() {
    int n; // 定义变量 n,用于存储目标兔子对数
    scanf("%d", &n); // 读取目标兔子对数 n

    // 单独处理第1个月的情况
    if (n == 1) { // 如果目标兔子对数为 1
        printf("1\n"); // 直接输出 1
        return 0; // 程序结束
    }

    int prev2 = 0; // 定义变量 prev2,表示上上个月的兔子对数,初始为 0
    int prev1 = 1; // 定义变量 prev1,表示上个月的兔子对数,初始为 1
    int curr = 1;  // 定义变量 curr,表示当前月的兔子对数,初始为 1
    int month = 2; // 定义变量 month,表示当前月数,初始为 2

    // 计算兔子对数,直到达到或超过目标对数 n
    while (curr < n) { // 当 当前月的兔子对数 小于 目标对数 时,继续循环
        prev2 = prev1; // 更新 上上个月的兔子对数 为 上个月的对数
        prev1 = curr;  // 更新 上个月的兔子对数 为 当前月的对数
        curr = prev2 + prev1; // 计算当前月的兔子对数,等于前两个月对数之和
        month++; // 月数加 1
    }

    // 输出达到目标兔子对数所需的最少月数
    printf("%d", month);

    return 0; // 程序正常结束
}

在这里插入图片描述
在这里插入图片描述

注意 📢】结合下面文章一起查看:🦋

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呀小萝卜儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值