34 繁殖问题


问题描述 :

有一家生化所,一月份引入一对新生的小白鼠。这对小白鼠生长两个月后,在第三、第四、第五个月各繁殖一对新小白鼠,在第六个月停止繁殖,在第七个月则死亡。新生的小白鼠也如此繁殖。问在第N个月时,活的小白鼠有多少对?

输入说明 :

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

输出说明 :

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

输入范例 :

1
2
3
4
5
6
7
8
30

输出范例 :

1
1
2
3
5
7
10
15
67066

思想:分别计算新增白鼠数量和每个月白鼠数量,

新增白鼠数量计算公式(当月新增的白鼠为 前i-2到i-4个月出生的白鼠之和 分别是刚生第一窝,生第二窝和生最后一窝):

newmouse[i] = newmouse[i-2]+newmouse[i-3]+newmouse[i-4]
当月白鼠数量计算公式(本月白鼠数量等于 上月的白鼠数量+当月新增的白鼠数量-六个月前出生的本月死亡的白鼠数量):
mouse[i] = mouse[i-1]+ newmouse[i] - newmouse[i-6]
 
复制代码
#include <stdio.h>
#include <math.h>
int main(){
    int month,i,j;
    int mouse[50]={1,1,2,3,5,7,10};  //每个月白鼠数量
    int newmouse[50]={0,0,1,1,2,2,4}; //每个月新增白鼠数量

    for(i=7;i<50;i++){
        newmouse[i] = newmouse[i-2]+newmouse[i-3]+newmouse[i-4]; //当月新增的白鼠为 前i-2到i-4个月出生的白鼠之和 分别是刚生第一窝,生第二窝和生最后一窝
    }
    for(i=7;i<50;i++){
        mouse[i] = mouse[i-1]+ newmouse[i] - newmouse[i-6]; // 本月白鼠数量等于 上月的白鼠数量+当月新增的白鼠数量-六个月前出生的本月死亡的白鼠数量
    }

    while(scanf("%d",&month)!=EOF){
            printf("%d\n",mouse[month-1]);
    }
    return 0;
}
复制代码

 

 
posted @   梦想是能睡八小时的猪  阅读(54)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示