【递推算法】兔子繁殖

题目描述

兔子具有很强的繁殖能力。一对成年兔子每个月可以繁殖一对小兔子,而一对小兔子经过m个月之后,就会长成一对成年兔子。当一开始有一对成年兔子时,经过d个月以后,共有多少对兔子?你的任务是计算出一堆成年兔子经过d个月之后,共有多少对兔子?可以假定,在此阶段没有任何兔子死亡。 

输入

输入包括多组测试数据。每组测试数据的一行中包括2个整数m(1<=m<=10),d(1<=d<=100)。当测试数据遇到一行中有两个0时,即m=d=0,测试数据结束。 

输出

针对每组测试数据,在每一行输出经过d个月后共有多少对兔子。 

样例输入 复制
2 3
3 5
0 0
样例输出 复制
5
9

#include<bits/stdc++.h>
using namespace std;
int m,n,d,t;
string r[1001];
string tz(string a)
{
	if(a.empty())
	a="0";
	while(a[0]=='0')
	a.erase(0,1);
	if(a.empty())
	a="0";
	return a;
}
string fz(string a,string b)
{
	while(a.size()<b.size())
	a="0"+a;
	while(b.size()<a.size())
	b="0"+b;
	a="0"+a;
	b="0"+b;
	for(int i=a.size()-1;i>0;i--)
	{
		a[i]+=b[i]-'0';
		if(a[i]>'9')
		{
			a[i]-=10;
			a[i-1]++;
		}
	}
	a=tz(a);
	return a;
}
int main()
{
	while(scanf("%d%d",&m,&d)!=EOF)
	{
		if(m==0&&d==0)
		break;
		r[0]="1";
		for(int n=1;n<=d;n++)
		{
			if(n-m<0) 
			t=0;
			else 
		    t=n-m;
			r[n]=fz(r[n-1],r[t]);
		}
		cout<<r[d]<<"\n";
	}
}

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值