兔子繁殖
兔子具有很强的繁殖能力。一对成年兔子每个月可以繁殖一对小兔子,而一对小兔子经过m个月之后,就会长成一对成年兔子。通过分析,我们可以看出:若m=2的时候,每个月兔子的对数构成了一个Fibonacci数列。
但是,若m<>2,这个问题看起来就不那么简单了。你的任务是计算:假定初始只有一对兔子,那么,经过d个月之后,共有多少对兔子?可以假定,在此阶段没有任何兔子死亡。
【输入】
输入包括多组测试数据。每组测试数据的一行中包括2个整数m(1<=m<=10),d(1<=d<=30)。当测试数据遇到一行中有两个0时,即m=d=0,测试数据结束。
【输出】
针对每组测试数据,在每一行输出经过d个月后共有多少对兔子。
【输入样例】
2 3
3 5
0 0
【输出样例】
5
9
下面是我写的代码,我不知道错在那里了,希望能帮忙,
#include<iostream>
using namespace std;
class Node
{
private:
Node *next;
int month;
public:
friend class List;
Node(int m=1,Node *n=NULL):month(m),next(n){}
};
class List:public Node
{
private:
Node *head;
int size;
public:
List()
{
head=new Node(0,NULL);
head->next=new Node(0,NULL); //第一个是零岁的,因为后面是先把月加了再判断的
size=1;
}
void run(int n,int m)//总时间,要多少时间才能生仔
{
int i=0;
for(i=0;i<n;i++)
{
Node *p=head->next;
while(p)
{
p->month=p->month+1;
if(p->month>=m)
{
Node *q=new Node(1,NULL);//刚刚出生的,相当于一年过去了
q->next=head->next;
head->next=q;
p->month=p->month+1;
size++;
}
p=p->next;
}
}
cout<<size<<endl;
}
};
int main()
{
List l;
l.run(3,2);
}