快捷搜索:
来自 计算机编程 2019-07-07 05:45 的文章
当前位置: 67677新澳门手机版 > 计算机编程 > 正文

经典的兔子生兔子问题

解法核心:每个月的新增的兔子都在下下个月以及以后的每个月生下一对新兔子,这对新兔子在下下个月以及以后的每个月都会生下一对新兔子,以此规律循环。

 

1,1,2,3,5,8,13...

 

2    0

Console.ReadLine();

用循环求和的方法求出每个月的兔子总数(主函数):

 

    因此,只要上个月有新增的兔子后,这个月都会新增和上个月新兔子数量同样的兔子,同时还会新增上上个月兔子数量的新兔子。这两个数量相加就得到这个月一共新增加的兔子。

case (int)Houxuanren.five:
fengqi ;
break;
default:
zuofei ;
break;
}

思考:

三、例子

一个斐波拉契数量的每一项减去另一个斐波拉契数列的对应每一项得到的新数列也是斐波拉契数列。(待验证)

//5个候选人竞选班长:张三,李四,王五,赵六,冯七
//班级中共有20人,20人轮流投票
//只要不是1~5之内的视为作废
//最后要知道谁的票数最多,当选班长

        static int NewRabbitOfMonth(int n)
        {
            if(n == 1)
            {
                return 1;
            }
            else if(n == 2)
            {
                return 0;
            }
            else
            {
                return NewRabbitOfMonth(n - 1) NewRabbitOfMonth(n - 2);
            }
        }

//Console.Write("请输入一个值:");
//int n = int.Parse(Console.ReadLine());
//int b = jie.jie(n);
//Console.Write(b);
//Console.ReadLine();

7    (1 1 1)6月份新增的兔子 (1 1)5月份新增的兔子

}
}

0,1,1,2,3,5,8...

{
public int dgqiuyang(int cun)
{
int sum = 0;
if (cun == 7)
{
return 2;
}
sum = 2*(dgqiuyang(cun 1) 1);
return sum;
}

1    1

static void Main(string[] args)

用递归的方法求出每个月新增的兔子(自定义函数):

函数体内吊用本函数自身,直到符合某一条件不在继续调用。

4    1

{
//Program tt = new Program();
//Console.Write("请输入月数:");
//int m = int.Parse(Console.ReadLine());
//int y = tt.t(m);
//Console.Write(y);
//Console.ReadLine();

...    ...

int[] shuzu = new int[20];
for (int i = 1; i <= 20; i )
{
Console.Write("请第" i "位同学来进行投票:");
shuzu[i - 1] = int.Parse(Console.ReadLine());
}
Console.WriteLine("投票结束!按下回车开始统计票数!");
Console.ReadLine();
int zhangsan = 0, lisi = 0, wangwu = 0, zhaoliu = 0, fengqi = 0, zuofei = 0;
for (int i = 0; i < 20; i )
{
switch (shuzu[i])
{
case (int)Houxuanren.one:
zhangsan ;
break;
case (int)Houxuanren.two:
lisi ;
break;

结论:

public int t(int z)
{
int sh = 0;
if (z == 1)
{
return 2;
}
sh = 2 * t(z - 1);
return sh;
}

3    1

Program hb = new Program();
double x = hb.dgqiuyang(1);

        static void Main(string[] args)
        {
            Console.Write("请输入第几个月:");
            int n = int.Parse(Console.ReadLine());
            int sumRabbitOfMonth = 0;
            for(int i =1; i <= n; i )
            {
                sumRabbitOfMonth = NewRabbitOfMonth(i);
            }
            Console.Write("第" n "个月共有" sumRabbitOfMonth "对兔子");
            Console.ReadLine();
        }

 

每个月新增的兔子数量实际上是一个斐波拉契数列:
1,0,1,1,2,3,5...

//有雌雄一对兔子,每过一个月便可繁殖雌雄各一的一对小兔子。

 

}

月份  新增加兔子

二、应满足自身条件

6    1 1 1

(2)有跳出反复执行过程的条件(函数出口)

5    1 1

2.递归函数的每次调用都需要栈来储存,如果次数太多的话容易造成栈溢出。

下面个数列每一项减去上面个数量每一项得到的新数列也是斐波拉契数列:

}
}
}

n    n - 1月份新增的兔子 n - 2月份新增的兔子

enum Houxuanren : int
{
one = 1,
two,
three,
four,
five
}

思路:先求出每个月新增的兔子,再用循环求和即可算出这个月总的兔子数。

四、注意事项

每个月总的兔子数量也是一个斐波拉契数列:

 

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

 

本文由67677新澳门手机版发布于计算机编程,转载请注明出处:经典的兔子生兔子问题

关键词: