楼主 晚上睡不着 于是给你用三种方法解答 嘿嘿 不要浪费哦
public class Program
{
static void Main(string[] args)
{
Console.Write("请输入月数:");
string buffer = Console.ReadLine();
int Months = Convert.ToInt32(buffer); //结束月数
CalculateByObjectOriented(Months);
CalculateByRecursion(Months);
CalculateByMathematics(Months);
}
public static void CalculateByObjectOriented(int MonthCount) //面向对象方法实现
{
Console.Write("使用面向对象方法实现,总兔子数:{0}\n" , new RearRing(MonthCount).GetRabbitTotal());
}
public static void CalculateByMathematics(int MonthCount)
{
//能力有限,抽象不出表达式,偷懒一下
//画一个节点图,你就能清楚地看出为什么了
int Period = 3; //出生后第几个月能生小兔
int val1 = 0;
int val2 = 0;
int val3 = 1;
int RubbitsCount = 2;
if (MonthCount > 3)
{
RubbitsCount += val3 * 2;
for (int i = Period + 1; i < MonthCount + 1; i++)
{
val1 = val2;
val2 = val3;
val3 = val2 + val1;
RubbitsCount += val3 * 2;
}
}
Console.Write("使用数学方法实现,总兔子数:{0}\n", RubbitsCount);
}
public static void CalculateByRecursion(int MonthCount) //递归实现
{
Console.Write("使用递归实现,总兔子数:{0}\n" , GetFinalNum(0,MonthCount,0));
}
private static int GetFinalNum(int StartMonth, int MonthCount,int Level) //递归调用
{
int FinalNum=2;
int Period = 3; //出生后第几个月能生小兔
for (int i = StartMonth; i < MonthCount; i++)
{
if (i - StartMonth >= Period-1)
{
FinalNum += GetFinalNum(i, MonthCount, Level + 1);
}
}
//For Debug
//Console.Write("当前级数:{0},共有兔子:{1}\n", Level, FinalNum);
return FinalNum;
}
}
public class RearRing
{
public IList<Rabbits> rabbitsList = new List<Rabbits>();
public RearRing(int MonthCount)
{
rabbitsList.Add(new Rabbits(this));
for (int i = 1; i < MonthCount; i++)
{
int count = rabbitsList.Count; //获取当前兔子数
for(int j=0;j<count;j++)
rabbitsList[j].Grow();
}
}
public int GetRabbitTotal()
{
return Rabbits.RabbitNum;
}
public void Add()
{
Rabbits newRabbits = new Rabbits(this);
rabbitsList.Add(newRabbits);
}
}
public class Rabbits
{
public static int RabbitNum = 0; //兔子总数
private const int BornRabbitNum = 2; //每次出生多少只
private const int Period = 3; //出生后第几个月能生小兔
private int Birthdate = 1; //题目不大明确,刚出生算几个月大?在此假定刚出生1个月大,也就是说,"第三个月开始"表示两轮后
RearRing _rearRing;
public Rabbits(RearRing RearRing)
{
this._rearRing = RearRing;
RabbitNum += BornRabbitNum;
}
public void Grow()
{
Birthdate+=1;
if (Birthdate >= Period)
Bear();
}
private void Bear()
{
_rearRing.Add();
}
}
温馨提示:答案为网友推荐,仅供参考