A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不怕 中级黑马   /  2013-6-22 20:53  /  1188 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一只小兔子一年后长成大兔子,一对大兔子每半年生一对小兔子。大兔子的繁殖期为4年,兔子的寿命是6年。
假定第一年年初投放了一对初生小兔子,
试编程计算,第n年末总共会有多少对兔子。

3 个回复

倒序浏览
建个兔子类,有年龄.
当年龄大于1后 1年生四对兔子

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

肯定是面向过程..还要用到递归..求高手解答
回复 使用道具 举报
我的方法太笨了 不要学
求高手来个科学的算法
  //一只小兔子一年后长成大兔子,一对大兔子每半年生一对小兔子。大兔子的繁殖期为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; }   
    }
回复 使用道具 举报
很好啊 ,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马