兔子问题
Posted 晴天彩虹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了兔子问题相关的知识,希望对你有一定的参考价值。
问题:
有人想知道一对兔子可繁殖成多少对,便在大草原上筑了一道围墙,把一对兔子关在里面。
已知一对兔子每一个月可以生一对小兔子,而一对小兔子出生后,第三个月开始生小兔子。兔子三岁后不再生育,之后一年死亡。
则投放一对兔子,20年后回来草原上有多少兔子?
程序源码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Rabbit { class Program { static void Main(string[] args) { LiveSystem system = new LiveSystem(2,15); List<RabbitOne> totalRabbit = system.Rabbits(); Console.WriteLine("num:" + totalRabbit.Count); foreach (var one in totalRabbit) { Console.WriteLine("id:" + one.Id + " month:" + one.Month+" parent:"+one.Parent); } Console.Read(); } } public class RabbitOne { private int id; private int month; private bool live; private string parent; public RabbitOne(int id, int month, string parent) { this.id = id; this.month = month; this.live = true; this.parent = parent; } public int Id { get { return id; } } public int Month { get { return month; } } public void Grow() { this.month++; } public bool Live() { if (this.month > 4 * 12) { return false; } return true; } public string Parent { get { return parent; } } } public class LiveSystem { private List<RabbitOne> _rabbits = new List<RabbitOne>(); private int i = 0; public LiveSystem(int rabbitNum, int limitMonth) { while ((rabbitNum=rabbitNum - 1) >= 0) { _rabbits.Add(new RabbitOne(i, 0,"")); i++; } Born(); while ((limitMonth = limitMonth - 1) >= 0) { _rabbits.ForEach(m =>m.Grow()); Born(); } } public List<RabbitOne> Rabbits() { return _rabbits.Where(m =>m.Live()).ToList(); } private void Born() { List<RabbitOne> canBornRabbits = _rabbits.Where(m => m.Month >= 3 && m.Month < 3 * 12).ToList(); if (canBornRabbits.Count < 2) return; //优化:可用随机抽取获取2只兔子 int canBorNum = (int) Math.Floor((double) (canBornRabbits.Count/2)); while ((canBorNum = canBorNum - 1) >= 0) { _rabbits.Add(new RabbitOne(i, 0, "$" + canBornRabbits[canBorNum*2].Id + "$" + canBornRabbits[canBorNum * 2+1 ].Id )); i++; } } } }
存在问题:
1.如果年份过长,或初始兔子数量太多,会爆出内存溢出。
如果谁有更好的实现方法,欢迎在底下评论、交流。
如果有哪个地方实现的不好的地方,也欢迎指正。
谢谢!
以上是关于兔子问题的主要内容,如果未能解决你的问题,请参考以下文章