关于繁衍类问题

阅读: 评论:0

关于繁衍类问题

关于繁衍类问题

经典题:兔子繁衍问题

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

这类问题本质其实还是问第i个月有多少对兔子
其实问题本身不难,经典兔子繁衍问题也符合斐波那契数列,所以也可以用斐波那契数列去做。
但如果用实际思路去做:我们可以把每一个月分步进行,成长,(找出)长大的,繁衍下一代。

由此可得代码。

#include <stdio.h>
int main(void)
{int n;scanf("%d",&n);int big_rabbit=0;//对 int small_rabbit[3]={1,0,0};//对while(--n){//成长small_rabbit[2]=small_rabbit[1];small_rabbit[1]=small_rabbit[0];//已经长大的了big_rabbit+=small_rabbit[2];//繁衍small_rabbit[0]=big_rabbit;}printf("%d",big_rabbit+small_rabbit[0]+small_rabbit[1]);return 0;
}

进阶题:母牛的故事 (HUD-2018)

题目链接:母牛的故事
有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

和上题比较,变动就在从3个月变成4个月了。因此不满足斐波那契数列。
但问题本质还是一样,实际思路依旧可以轻松解决

#include <stdio.h>
int main(void)
{int n;while(scanf("%d",&n),n!=0){if(n<=4)printf("%d",n);else{//3 lcow 1 cown-=4;//这里把第四年作为开端,下面思路如出一辙int cow=1,lcow[4]={1,1,1,0};while(n--){//长大lcow[3]=lcow[2];lcow[2]=lcow[1];lcow[1]=lcow[0];//成年cow+=lcow[3];//繁衍lcow[0]=cow;}printf("%d",cow+lcow[0]+lcow[1]+lcow[2]);}printf("n");}return 0;
}

当然这些题也可以通过数学归纳法整理出递推公式
f(n)=f(n-1)+f(n-3) //n>=4
然后利用递推公式去求解。

偏现实问题:动物繁衍问题

设农场饲养某种动物所能达到最大年龄为15岁,分三个年龄段:
一.1~5岁
二.6~10岁
三.11~15岁
动物从第二个年龄段开始繁衍后代,第二个年龄段可以繁衍四个后代,第三个年龄段可以繁衍3个后代
第一个年龄段和第二个年龄段的动物能顺利进入下一个年龄段的存活率分别为0.5和0.25

假设农场现有三个年龄段的动物各1000头.(假设都是各年龄段的初始岁数即1岁6岁11岁各1000)
(1).计算5年后,10年后,15年后,20年后各年龄段动物数量,50年后农场三个年龄段的动物情况如何?

按照实际思路代码:

#include <stdio.h>
void P_sum(int);
int main()
{P_sum(5);P_sum(10);P_sum(15);P_sum(20);P_sum(50);return 0;
}
void P_sum(int n)
{int n_t=n;long long animal[3][5]={{1000,0,0,0,0},{1000,0,0,0,0},{1000,0,0,0,0}};while(n--){//成长+死亡long long animal0=animal[0][4];long long animal1=animal[1][4];for(int i=0;i<3;i++){for(int j=3;j>=0;j--)animal[i][j+1]=animal[i][j];}//成年(跨年龄段)animal[1][0]=animal0/2;animal[2][0]=animal1/4;//繁衍long long sum_animal=0;for(int i=0;i<4;i++)sum_animal+=animal[1][i]*4+animal[2][i]*3;animal[0][0]=sum_animal;}long long sum=0;for(int i=0;i<3;i++)for(int j=0;j<5;j++)sum+=animal[i][j];printf("%d years later :%lldn",n_t,sum);if(n_t==50)printf("1.%lldn2.%lldn3.%lld",animal[0][0]+animal[0][1]+animal[0][2]+animal[0][3]+animal[0][4],animal[1][0]+animal[1][1]+animal[1][2]+animal[1][3]+animal[1][4],animal[2][0]+animal[2][1]+animal[2][2]+animal[2][3]+animal[2][4]);
}

本文发布于:2024-02-03 03:49:34,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170690337648455.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23