Ulln❀ 2026-01-16 21:55 采纳率: 0%
浏览 5

竞赛问题-小鼠繁殖,求解(用c++)

作者: 孙辞海
时间限制: 1s
章节: 一维数组
问题描述
有一家生化所,一月份引入一对新生的小白鼠。这对小白鼠生长两个月后,在第三、第四、第五个月各繁殖一对新小白鼠,在第六个月停止繁殖,在第七个月则死亡。新生的小白鼠也如此繁殖。问在第N个月时,活的小白鼠有多少对?

输入说明
你的程序需要从标准输入设备(通常为键盘)中读入多组测试数据。每组输入数据由一行组成,其中只有一个整数N(0 < N ≤ 50)。两组输入数据间无空行。

输出说明
对于每组测试数据,你的程序需要向标准输出设备(通常为启动该程序的文本终端)输出一行,其中只有一个整数,即第N个月时活的小白鼠有几对,所有数据前后没有多余的空行,两组数据之间也没有多余的空行。

输入范例
1
2
3
4
5
6
7
8
30
输出范例
1
1
2
3
5
7
10
15
67066

  • 写回答

3条回答 默认 最新

  • 紫雾凌寒 新星创作者: 人工智能技术领域 2026-01-16 21:55
    关注

    让 “紫雾凌寒” 来帮你回答,本回答结合 DeepSeek

    如果还有问题,请评论或点击头像私信,如果有帮助到您, 请关注、采纳、点赞

    1. 关键点分析:
      - 明确小白鼠的繁殖规律和生存周期。
      - 用合适的数据结构存储每个月小白鼠的数量。
      - 通过循环模拟每个月小白鼠数量的变化。
    2. 解决方案:
    #include <iostream>
    #include <vector>
    
    int main() {
        int months = 7;
        std::vector<int> mice(months, 0);
        mice[0] = 1;
    
        for (int i = 1; i < months; ++i) {
            int newBorn = 0;
            for (int j = std::max(0, i - 2); j < std::max(0, i - 5); ++j) {
                newBorn += mice[j];
            }
            mice[i] = mice[i - 1] + newBorn;
            if (i >= 6) {
                mice[i] -= mice[i - 6];
            }
        }
    
        for (int i = 0; i < months; ++i) {
            std::cout << "Month " << i + 1 << ": " << mice[i] << " mice" << std::endl;
        }
    
        return 0;
    }
    
    1. 代码解释:
      - 定义一个vector<int>来存储每个月小白鼠的数量,初始值都为0,第一个月有1对小白鼠。
      - 通过循环从第二个月开始计算每个月的小白鼠数量。
      - 对于每个月,计算新生小白鼠的数量,新生小白鼠由前2到5个月存活的小白鼠繁殖产生。
      - 每个月的小白鼠数量等于上个月的数量加上新生小白鼠数量。
      - 从第七个月开始,减去在第六个月出生的小白鼠数量(因为它们在第七个月死亡)。
      - 最后输出每个月小白鼠的数量。
    2. 多种解决方案优缺点:
      - 使用数组
      • 优点:简单直观,访问元素速度快。
      • 缺点:需要预先知道最大月份数,可能造成空间浪费。
      • 使用动态规划
      • 优点:可以更灵活地处理不同的繁殖和生存规则,代码结构更清晰。
      • 缺点:实现相对复杂,对于简单问题可能增加不必要的复杂度。
    3. 总结:
      通过上述代码,利用数组模拟每个月小白鼠数量的变化,按照给定的繁殖和生存规则进行计算,最终输出每个月小白鼠的数量。这种方法简单直接,适合解决此类具有明确规律的问题。

    希望以上解答对您有所帮助。如果您有任何疑问,欢迎在评论区提出。

    评论

报告相同问题?

问题事件

  • 创建了问题 1月16日