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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)