一对小兔子一年后长成大兔子;一对大兔子每半年生一对小兔子。大兔子的繁殖期为4年,兔子的寿命是6年。假定第一年年初投放了一对小兔子,试编程计算,第n年末总共会有多少对兔子。
using System;
using System.Text.RegularExpressions;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.Write("请输入现在是投放第一对兔子之后的第几年,输入小于1的数将退出:");
string readStr = Console.ReadLine();
Regex reg = new Regex(@"^[0-9]+(.[0-9])?$");
Match match = reg.Match(readStr);
while (!match.Success)
{
Console.Write("请输入现在是投放第一对兔子之后的第几年,输入小于1的数将退出:");
readStr = Console.ReadLine();
match = reg.Match(readStr);
}
double i = Convert.ToDouble(readStr); ;
while (i >= 1)
{
Console.WriteLine("第{0}年,兔子数量:{1}", i, CalcRabbit(i - 1));
Console.Write("请输入现在是投放第一对兔子之后的第几年,输入小于1的数将退出:");
readStr = Console.ReadLine();
while (!match.Success)
{
Console.Write("请输入现在是投放第一对兔子之后的第几年,输入小于1的数将退出:");
readStr = Console.ReadLine();
match = reg.Match(readStr);
}
i = Convert.ToDouble(readStr);
}
Console.Write("按任意键结束");
Console.Read();
}
/// <summary>
/// 当前投放兔子的年份为1;
/// 兔子将会在第2.5年的时候生第一胎;
/// 第6年生最后一胎;
/// 第7年死掉;
/// </summary>
/// <param name="year"></param>
/// <returns></returns>
public static int CalcRabbit(double year)
{
if (year < 1 && year > 0)
return 1;
else if (year < 0)
{
return 0;
}
else if ((year == 1))
return 1;
else
{
return (year > 6 ? 0 : 1)
+ CalcRabbit(year - 5)
+ CalcRabbit(year - 1.5)
+ CalcRabbit(year - 2)
+ CalcRabbit(year - 2.5)
+ CalcRabbit(year - 3)
+ CalcRabbit(year - 3.5)
+ CalcRabbit(year - 4)
+ CalcRabbit(year - 4.5);
}
}
}
}