当前位置:嗨网首页>书籍在线阅读

07-母牛生小牛问题

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.1.5 母牛生小牛问题

问题描述

19.png 有一头母牛,每年年初生一头小母牛,每头小母牛从第3年起,每年年初也生一头小母牛。求在第20年时共有多少头母牛。

【分析】

令x0i、x1i、x2i、x3i分别表示第i年后刚生下的母牛、满1岁的母牛、满两岁的母牛及可生小母牛的母牛。根据题意,可以得到以下递推公式。

x0i = x3i= x2i−1+x3i−1  (满两岁、3岁的母牛成为下一年的育龄母牛且都能生下1头小母牛)

x11= x0i−1        (刚生下的小母牛到下一年成为满1岁的小母牛)

x2i = x1i−1         (满1岁的小母牛到下一年成为满两岁的小母牛)

x00=1

x10= x20= x30=0     (初始时,只有一头小母牛)

其中,i=1, 2, 3, …, 20。

初始时,只有一头刚出生的小母牛,因此有x00=1,x10=x20=x30=0;第(i−1)年刚生下的小母牛变为第i年的满1岁小母牛,即x1i=x0(i−1);第(i−1)年满1岁的小母牛成为第i年满两岁的小母牛,即x2i=x1(i−1);第(i−1)年满两岁和满3岁的小母牛都会在第i年生下小母牛,即x0i=x2(i−1)+x3(i−1);第(i−1)年满两岁和满3岁的小母牛都成为育龄母牛,即x3i=x2(i−1)+x3(i−1)

第11章\实例11-05.c
/********************************************
*实例说明:母牛生小牛问题
*********************************************/
1  #include<stdio.h>
2  #define N 20
3  void main()
4  {
5      int x0[N+1],x1[N+1],x2[N+1],x3[N+1],i,s;
6      /*初始时,只有一头刚出生的母牛*/
7      x0[0]=1;
8      x1[0]=x2[0]=x3[0]=0;
9      for(i=1;i<=N;i++)
10     {
11         x0[i]=x3[i]=x2[i-1]+x3[i-1];/*满两岁和满3岁的母牛成为育龄母牛,且都生了小母牛*/
12         x1[i]=x0[i-1];/*刚生下的小母牛成为下一年的满1岁的母牛*/ 
13         x2[i]=x1[i-1];/*满1岁的小母牛成为下一年的满两岁的母牛*/
14         s=x0[i]+x1[i]+x2[i]+x3[i];/*第i年的母牛总数*/
15         printf("第%d年后母牛的总数:%4d\n",i,s);
16     }
17 }

运行结果如图11.8所示。

334.png

图11.8 运行结果