黑马程序员技术交流社区

标题: 这个怎么做? [打印本页]

作者: 不怕    时间: 2013-6-22 20:53
标题: 这个怎么做?
一只小兔子一年后长成大兔子,一对大兔子每半年生一对小兔子。大兔子的繁殖期为4年,兔子的寿命是6年。
假定第一年年初投放了一对初生小兔子,
试编程计算,第n年末总共会有多少对兔子。

作者: 一直在努力    时间: 2013-6-22 22:52
建个兔子类,有年龄.
当年龄大于1后 1年生四对兔子

想用面向对象..想了想不会..

肯定是面向过程..还要用到递归..求高手解答
作者: 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]);
                }

            }

            Console.WriteLine("{0}年有{1}只兔子",years,rabbits.Count);
            Console.ReadKey();


//兔子类
public class rabbit
    {
        public int Age { set; get; }   
    }
作者: 不怕    时间: 2013-6-23 12:29
很好啊 ,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2