啤酒 2元一瓶
4个瓶盖换1瓶
2个空瓶换1瓶
问:10元可以喝几瓶?
'类模块
Option Explicit
'定义一个对象——酒瓶,就两个属性,分别为 瓶子,瓶盖
Public 瓶子 As Integer
Public 瓶盖 As Integer
’模块
Option Explicit
Public Const 初始酒数量 As Integer = 5
Public 酒() As Variant, iCount As Integer
Public Sub Init()
Dim Item1 As 酒瓶
ReDim 酒(初始酒数量 - 1)
iCount = 初始酒数量 - 1
Dim i As Integer
For i = 0 To 初始酒数量 - 1
Set Item1 = New 酒瓶
Item1.瓶盖 = 1
Item1.瓶子 = 1
Set 酒(i) = Item1
Next i
End Sub
Public Sub DoIt() '开喝开换
Call 空瓶换酒
Call 瓶盖换酒
Dim i As Integer, int瓶子Num As Integer, int盖Num As Integer
For i = 0 To iCount
If 酒(i).瓶子 = 1 Then int瓶子Num = int瓶子Num + 1
If 酒(i).瓶盖 = 1 Then int盖Num = int盖Num + 1
Next i
If int瓶子Num >= 2 Or int盖Num >= 4 Then
DoIt
Else
Debug.Print "一共喝了"; iCount + 1; "瓶酒"
End If
End Sub
Private Sub 空瓶换酒()
Dim i As Integer
Dim ArrChange(1) As Integer, j As Integer
For i = 0 To iCount
If j > 1 Then Exit For
If 酒(i).瓶子 = 1 Then
ArrChange(j) = i
j = j + 1
End If
Next i
'不够两个瓶子,不能换,结束
If j < 2 Then Exit Sub
'换过酒的瓶子设为0
For i = 0 To j - 1
酒(ArrChange(i)).瓶子 = 0
Next i
''换一瓶酒,加入集合
Dim Item1 As New 酒瓶
Item1.瓶盖 = 1
Item1.瓶子 = 1
iCount = iCount + 1
ReDim Preserve 酒(iCount)
Set 酒(iCount) = Item1
Debug.Print "2个空瓶子换1瓶酒"
'继续换酒,递归
Call 空瓶换酒
End Sub
Private Sub 瓶盖换酒()
Dim i As Integer
Dim ArrChange(3) As Integer, j As Integer
For i = 0 To iCount
If j > 3 Then Exit For
If 酒(i).瓶盖 = 1 Then
ArrChange(j) = i
j = j + 1
End If
Next i
'不够4个瓶盖,不能换,结束
If j < 4 Then Exit Sub
'换过酒的瓶盖设为0
For i = 0 To j - 1
酒(ArrChange(i)).瓶盖 = 0
Next i
''换一瓶酒,加入集合
Dim Item1 As New 酒瓶
Item1.瓶盖 = 1
Item1.瓶子 = 1
iCount = iCount + 1
ReDim Preserve 酒(iCount)
Set 酒(iCount) = Item1
Debug.Print "4个瓶盖换1瓶酒"
'继续换酒,递归
Call 瓶盖换酒
End Sub
'执行计算
sub main()
end main