88递增的牛群:若有一头小母牛,从第四年开始每年生育一头母牛,按照此规律,第n年时有多少母牛?请设计求解此问题的C语言程序。
因为从第四年开始小母牛才会开始生产一个小牛,生产的小牛经过三年后在第四年又会重新生产新的小牛,所以我们可以从此为切入点。
本题第一种做法就是:将前几年的牛的个数写出来,从而观察出规律。即:
第一年:1
第二年:1
第三年:1
第四年:2
第五年:3
第六年:4
第七年:6
第八年:9
第九年:13
第十年:19
...................
第n年:第n-1年个数+第n-3年数
不难发现:第n年:第n-1年个数+第n-3年数。所以可以根据此公式来设计C语言程序。
第二种方法:
由题意可知,由于母牛在第四年时会产生新的小牛,所以前三年都是一头牛。从第四年开始,第一头母牛要开始生产新的小牛(虽然我也不知道一头母牛怎么生产),同时新的小牛要在第四年时开始生产,因为每年都有新的小牛出生,所以每年可以产生的小牛数量会发生变化。但是本题的出发点是刚出生的小牛从第四年开始,之后的每一年都会生产新的小牛,而唯一发生变化的是本年新增加的能恰好可以生产的小牛的个数,所以唯一的变量就是每年新增加的能恰好生产的小牛数量(简称这种小牛)。
都是这种小牛的数量怎么算呢?(不要怪我啰嗦)题上已经明确了刚出生的小牛从第四年开始每年生育一头母牛,所以这种小牛的数量就为三年前刚出生的小牛个数,而本年的小牛个数即为三年前刚出生的小牛个数+前一年的牛的个数。大家可以把前一年牛的个数理解为原来的牛的个数,把前三年前刚出生的小牛理解为本年新增的牛的个数。思路开朗了起来~~~
总上,我们可以设计四个变量来表示我们的思路;
oxnum表示本年牛的个数
oxnum1表示向前数第一年牛的个数
oxnum2表示向前数第二牛的个数
oxnum3表示向前数第三牛的个数
因此我们可以得到一下等式:
oxnum1=oxnum /*今年的牛数成为明年向前数第一年的牛数*/
oxnum2=oxnum1 /*今年向前数第一年的牛数成为明年向前数第二年的牛数*/
oxnum3=oxnum2 /*今年向前数第二年的牛数成为明年向前数第三年的牛数*/
这样,我们便有了迭代递推关系
参考代码如下:
#include<stdio.h>
int main(void){
int i,year,oxnum,oxnum1,oxnum2,oxnum3;
printf("请输入年数:");
scanf("%d",&year);
for(int i=1;i<=year;i++){
if(i<4){
oxnum = oxnum1 = oxnum2 = oxnum3 = 1;
}
else{
oxnum = oxnum1 + oxnum3;
oxnum3 = oxnum2;
oxnum2 = oxnum1;
oxnum1 = oxnum;
}
printf("i =%2d->oxnumber =%3d \n",i,oxnum);
}
return 0;
}