有一头母牛,每年年初生一头小母牛,每头小母牛从第3个年头起每年年初也可以生一头小母牛。求在第20年时有多少头母牛。
令x0_i,x1_i,x2_i,x3_i分别表示第i年后刚生下的母牛、满1岁的母牛、满2岁的母牛以及可生小母牛的母牛。根据问题,可以得到递推公式如下:
初始时,只有1头刚出生的小母牛,因此有x0_0=1,x1_0=x2_0=x3_0=0;
第i-1年刚生下的小母牛变为第i年满1岁的小母牛,即x1_i=x0_{i-1};
第i-1年满1岁的小母牛成为第i年满2岁的小母牛,即x2_i=x1_{i-1};
第i-1年满2岁的小母牛和满3岁的小母牛都会在第i年生下小母牛,即x0_i=x2_{i-1}+x3_{i-1};
第i-1年满2岁的小母牛和满3岁的小母牛都成为育龄牛,即x3_i=x2_{i-1}+x3_{i-1};
code:
#include<stdio.h>
#include <iostream>
#define N 20
void main()
{int x0[N + 1], x1[N + 1], x2[N + 1], x3[N + 1], i, s;/*初始时,只有一头刚出生的母牛*/x0[0] = 1;x1[0] = x2[0] = x3[0] = 0;for (i = 1; i <= N; i++){x0[i] = x3[i] = x2[i - 1] + x3[i - 1];/*满2岁和满3岁的母牛成为育龄牛,且都生了小母牛*/x1[i] = x0[i - 1];/*刚生下的小母牛成为下一年的满1岁母牛*/x2[i] = x1[i - 1];/*满1岁的小母牛成为下一年的满2岁母牛*/s = x0[i] + x1[i] + x2[i] + x3[i];/*第i年的母牛总数*/printf("第%d年后母牛的总数:%4d\n", i, s);}system("pause");
}
结果: