有一母牛,到4岁可生育,每年生一头,所生均是同样的母牛,到15岁绝育,不再能生,20岁死亡,问n年后有多少头牛?

在刚刚开始关于牛群问题,为了能更容易理解以及解决,我们可以利用递归的方法来解决这个问题;

不废话,直接上代码。

#include<iostream>
using namespace std;
int niu(int year,int& num){	
	for(int i=1;i<=year;i++){
		if(i>=4&&i<15){
			num++;  //在绝育前的可生育的每一年都可以每年生一头母牛 
			niu(year-i+1,num);  //计算小牛生的牛数量 
		}
		if(i==20){  //当一头牛20岁时,则死亡 
			num--;
		}
	}
	return num;  //返回牛群的总数量
}

int main(){
    int num=1  //初始只有一头牛
    int y;  
	cout<<"请输入一共有多少年:";
	cin>>y; 
	cout<<y<<"年后,一共有"<<niu(y,num)<<"头牛"<<endl;
	return 0;
}

在代码中我们可以知道,每递归一次,就可判断生下来的小牛是否可以生母牛,其递归中的 year-i+1 是小牛的年龄,有些人可能不知道未什么最后还要+1,这是因为当第一头牛生下的小母牛时,每过一年,小牛也要长一岁,例如七年后 大牛是七岁,小牛是四岁,它们会在同一年都生下一头牛。我也解释不清楚。....呜呜呜... 就比如当year=7时,7-i(i=4)=3,递归的话小于4,所以要在后面+1。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值