今天在网上见到这么一道题,用任何语言实现都行。
题目为:有一母牛,到4岁可生育,每年一头,所生均是一样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛?
玉丰补充: 此题有一个模糊的地方,就是牛的年龄问题,可以这样理解,从小牛出生的那一年开始计算,三年后就可以生小牛了,其数据如下:
1-3 A
4 A AB
5 A AB AC
6 A AB AC AD
7 A AB AC AD AE ABB(注意,今年AB已经4岁了,所以生了一只ABB)
AB 是 A 在第4年生的,到第7年时,它4岁了,所以也生了一只ABB
#include
//隔几年生小牛
#define N 3
#define M 14
long ox_count = 1;
int main(){
int i, n =69;
printf("input a number(max 69)\n");
scanf("%d",&n);
long nums[101];
for(i = 1 ; i<= n;i ++){
if(i <= N ){
nums[i] = 1;continue;
}
if(i >= 20){
//第二十年,我们伟大的母牛去了
if(i == 20){
nums[i] = nums[i - N] + nums[i -1] - 1 - nums[i -M];
}
//第20到第20+N年间,没出生的牛,于是也没有死去的牛
if(i > 20 && i <= 20 + N){
nums[i] = nums[i - N] + nums[i -1] - nums[i -M];
}
//第20+N年后出生的牛数,要减去20年前的牛数.
if(i > 20 + N){
nums[i] = nums[i - N] + nums[i -1] - nums[i - 20 - N] - nums[i - M];
}
}else{
if(i < 15){
//还没到20年后,所以没有死去的牛
nums[i] = nums[i - N] + nums[i -1] ;
}else{
nums[i] = nums[i - N] + nums[i -1] -nums[i - M];
}
}
printf("%d: %ld\n" ,i, nums[i]);
ox_count = nums[i];
}
printf("total: %ld\n" , ox_count);
}