大家好,由于初涉这里,现有一个问题想请教,是关于算法和思路的,题目如下:
假设在第一个月时有一对小兔子,第二个月时成为大兔子,第三个月时成为老兔子,并生下一对小兔子(一对老,一对小。)。第四个月时兔子又生下一对小兔子,上个月的小兔子变成大兔子(一对老,一对大,一对小)。第5个月时上个月的大兔子变成老兔子,上个月的小兔子变成大兔子,两对老兔子生下两对下兔子(两对老兔子,一对大兔子,两对小兔子)........
怎么样对这个题进行思考呢?
假设在第一个月时有一对小兔子,第二个月时成为大兔子,第三个月时成为老兔子,并生下一对小兔子(一对老,一对小。)。第四个月时兔子又生下一对小兔子,上个月的小兔子变成大兔子(一对老,一对大,一对小)。第5个月时上个月的大兔子变成老兔子,上个月的小兔子变成大兔子,两对老兔子生下两对下兔子(两对老兔子,一对大兔子,两对小兔子)........
怎么样对这个题进行思考呢?
for i=1 to e
a=c,b=a,c=c+b
'每过一个月小兔子数为上月老兔子数,大兔子数为上月小兔子数 老兔子数为月大兔子数+老兔子数
next i
实现代码如下:Private Sub Test(Months As Integer)
Dim i As Integer
Dim j As Integer
Dim intTemp As Integer
Dim Rabits() As Integer
ReDim Rabits(1 To 1)
Rabits(1) = 0
For i = 1 To Months
intTemp = UBound(Rabits)
For j = 1 To intTemp
DoEvents
Rabits(j) = Rabits(j) + 1
If Rabits(j) > 2 Then
ReDim Preserve Rabits(1 To UBound(Rabits) + 1)
Rabits(UBound(Rabits)) = 1
End If
Next
Next
Dim baby As Integer, young As Integer, old As Integer
For j = 1 To UBound(Rabits)
If Rabits(j) = 1 Then
baby = baby + 1
ElseIf Rabits(j) = 2 Then
young = young + 1
Else
old = old + 1
End If
Next
Debug.Print Months & "月:" & baby & "小," & young & "大," & old & "老"
End Sub
调用举例:
Dim i As Integer
For i = 1 To 10
Test i
Next输出:
1月:1小,0大,0老
2月:0小,1大,0老
3月:1小,0大,1老
4月:1小,1大,1老
5月:2小,1大,2老
6月:3小,2大,3老
7月:5小,3大,5老
8月:8小,5大,8老
9月:13小,8大,13老
10月:21小,13大,21老
Dim i As Integer
Dim Rabits(1 To 3) As Integer
'1代表小兔 2代表大兔 3代表老兔
For i = 1 To Months
If i = 1 Then
Rabits(1) = 1 '第一个月时有一对小兔
Else
'老兔的数量为原有的老兔加上上个月的大兔
Rabits(3) = Rabits(3) + Rabits(2)
'上个月的小兔全部长成大兔子
Rabits(2) = Rabits(1)
'每对老兔子生了一对小兔
Rabits(1) = Rabits(3)
End If
Next
Debug.Print Months & "月:" & Rabits(1) & "小," & Rabits(2) & "大," & Rabits(3) & "老"
End Sub调用举例:
Dim i As Integer
For i = 1 To 10
Test i
Next