生兔子的经典编程算法

生兔子的经典编程算法,第1张

一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一亏没对小兔子来。如果所有兔都不死,那么一年以后可以神空陪繁殖多少对兔子?

1 1月

1 2月

2 3月

3 4月

5 5月

8 6月

13 7月

21 8月

34 9月

55 10月

89 11月

14412月

23313月

第1种:

Private Sub Command1_Click()

i = 0

x = 1

y = 1

b = x &"," &y

For n = 3 To 13 Step 1

i = x + y

x = y

y = i

b = b &"," &i

Next

Print b

End Sub

这个算法是最经典的。其实a月的数量也就是老兔子加上新生兔子。老兔子这么算的:因为当月的生产数量为上个月的兔子总数,而这个生产数量就是由老兔子生的。所以老兔子的数量就是a-1月的数量也就是上一个月的数量。新兔子这么算的:因为新兔子游蠢就是上一个月的繁殖数量,即a-1月的繁殖数量,而这个繁殖数量就是由a-2月的总数决定的,所以新兔子就是a-2月了。所以根据这个原理,第一种方法成立。

第2种:

Private Sub Command1_Click()

i = 0

x = 1

y = 1

z = 2

b = x &"," &y &"," &z

For n = 4 To 13 Step 1

i = y * 2 + x

x = y

y = z

z = i

b = b &"," &i

Next

Print b

End Sub

第2种算法的逻辑是:

(a月-2的月总数)* 2 + (a月-3月总数)

因为当月的生产数量为上个月的兔子总数,而当月的新兔子(即上个月新生的兔子,这个月还未能生产)数量为上上个月的总数。

第3种:

Private Sub Command1_Click()

i = 0

x = 1

y = 1

z = 2

b = x &"," &y &"," &z

For n = 4 To 13 Step 1

i = z * 2 - x

x = y

y = z

z = i

b = b &"," &i

Next

Print b

End Sub

(a月总数*2) - (a-2月总数)

这第2种算法和第3种算法是基于第一种算法的原理的。只不过实在太复杂了,我自己脑子里只能粗略整理它的逻辑关系(其实也不是很懂),所以写出来大家一定看不懂。。。

后记:这个经典的兔子数列其实还可以继续玩下去。有非常复杂的递推关系(自己说的,虽然没学过什么叫真正的递推不过应该差不多吧)。每个参数影响非常复杂。我本来想继续这个混乱的递推逻辑,但想到再复杂的算法的时候我差不多都要疯掉了。。啊啊啊,暂时就这样吧~~~大脑休息下。熄火。

根据题意,得出以下结果:

年份:0 0.5 1 1.5 2 2.5 3 3.5 4 ...

兔子:1 1 2 3 5 8 13 21 34...

序号: 0 1 2 3 4 5 6 7 8...

所以发皮腔现规律:除前两个外,后面的则是等于前两个的种即:A0=1,A2=1,An=A(n-1)+A(n-2)

这样程序就可以开始哪握竖编制了

#include "stdio.h"

main()

{

int year,total,i,a1,a2

printf("\n请输入多少年后李大:")

scanf("%d",&year)

a1=1

a2=1

for(i=2i<2*yeari++)

{

if(i%2==1)

{

a1=a1+a2

total=a1

}else{

a2=a1+a2

total=a2

}

}

printf("\n第%d年末总共会有%d对兔子",year,total)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12420960.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存