肯定是面向过程..还要用到递归..求高手解答作者: 274997322 时间: 2013-6-23 00:49
我的方法太笨了 不要学
求高手来个科学的算法
//一只小兔子一年后长成大兔子,一对大兔子每半年生一对小兔子。大兔子的繁殖期为4年,兔子的寿命是6年。
//假定第一年年初投放了一对初生小兔子,
List<rabbit> rabbits = new List<rabbit>();//创建一个兔子集合
rabbit r1 = new rabbit(); //创建一对兔子
rabbit r2 = new rabbit();
rabbits.Add(r1); //将这对兔子添加到集合
rabbits.Add(r2);
int years = 2; //存放n年后的years
List<rabbit> childR = new List<rabbit>(); //创建集合存放新生兔子
List<rabbit> deadR = new List<rabbit>(); //创建集合存放已死兔子
for (int year = 0; year <= years; year++) //从第一年到第n年循环计算
{
childR.Clear(); //清空新生兔集合
deadR.Clear(); //清空已死兔群集合
for (int i = 0; i < rabbits.Count; i++) //分别遍历每只兔子的情况
{
if (rabbits[i].Age == 3) //该兔子的年龄为6死亡,从集合中移除该兔
{
deadR.Remove(rabbits[i]);
}
if (rabbits[i].Age >= 1 && rabbits[i].Age <= 5)//该兔子在1-5岁之间每年都会生2个小兔子
{
rabbit child1 = new rabbit(); //新建2个新手兔子
rabbit child2 = new rabbit();
childR.Add(child1); //添加到新生孩子集合
childR.Add(child2);
}
rabbits[i].Age++; //该兔子年龄+1
}
for (int i = 0; i < childR.Count; i++) //把新生集合的兔子添加到兔群集合
{
rabbits.Add(childR[i]);
}
for (int i = 0; i < deadR.Count; i++) //把已死集合的兔子从兔群集合里移除
{
rabbits.Remove(deadR[i]);
}