大家好,由于初涉这里,现有一个问题想请教,是关于算法和思路的,题目如下:
 假设在第一个月时有一对小兔子,第二个月时成为大兔子,第三个月时成为老兔子,并生下一对小兔子(一对老,一对小。)。第四个月时兔子又生下一对小兔子,上个月的小兔子变成大兔子(一对老,一对大,一对小)。第5个月时上个月的大兔子变成老兔子,上个月的小兔子变成大兔子,两对老兔子生下两对下兔子(两对老兔子,一对大兔子,两对小兔子)........
  
怎么样对这个题进行思考呢?

解决方案 »

  1.   

    定义a,b,c,e分别对应小兔子,大兔子,老兔子对数 月份数
    for i=1 to e
    a=c,b=a,c=c+b  
    '每过一个月小兔子数为上月老兔子数,大兔子数为上月小兔子数 老兔子数为月大兔子数+老兔子数
    next i
      

  2.   

    著名的菲波那契数组,google搜一下,应该有很多算法^_^
      

  3.   

    基本同意jjkk168的说法。
    实现代码如下: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老
      

  4.   

    下午的考虑有点仓促(抢分),晚上再打开这个帖子,觉得算法有点不合理,占用内存太大,并且循环次数太多。修改算法如下:Private Sub Test(Months As Integer)
        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