老鼠繁殖问题

来源:百度知道 编辑:UC知道 时间:2024/06/25 06:58:03
老鼠繁殖问题
题目描述:有一对小老鼠,出生一周后长成一对大老鼠,两周后出生第一对小老鼠,三周后,上周出生的小老鼠变成了大老鼠,而原来的大老鼠又生出了一对小老鼠之后便死亡了,四周后,第一对出生的小老鼠(此时已经是大老鼠)又生出了一对小老鼠,此时共有三对老鼠。试编制程序,计算N周后有多少对老鼠?
基本要求:(1)编程实现,要求N的取值可以随意变换;
(2)实物演示时要求讲出程序原理;
提高要求:(1)能够采用一些形式动态描述老鼠出生和长大这一过程;(2)考虑采用性能好的算法。设计提示:老鼠的数量肯定是一个不断增长的过程,关键是找出该过程的规律,可以考虑采用递归的思想来实现该程序。

定义f为老鼠、时间的映射函数:
老鼠状态有x0(小老鼠),大老鼠x1,生一胎的大老鼠x2,(生二胎就死的大老鼠没必要定义此状态)
f(x0,1) = f(x1,0)
f(x0,2) = f(x1,1)=f(x2,0) + f(x0,0)
f(x0,3) = f(x1,2) =f(x2,1)+ f(x0,1) = f(x0,0) + f(x0,1)

==>
f(x0,1) = f(x1,0)
f(x1,1) = f(x2,0) + f(x0,0)
f(x2,1) = f(x0,0)

// mouse.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;

enum
{
LIFE0 = 0,
LIFE1,
LIFE2
};

struct Mice
{

Mice()
{
allmouse[LIFE0] = 0;
allmouse[LIFE1] = 0;
allmouse[LIFE2] = 0;
}
Mice(int lev0num,int lev1num=0,int lev2num=0)
{
allmouse[LIFE0] = lev0num;
allmouse[LIFE1] = lev1num;
allmouse[LIFE2] = lev2num;
}

void AfterOneWeek()
{
int tmp0Life1 = allmouse[LIFE0];

int tmp1Life0 = allmouse[LIFE1]