|
只测试了一个
- Sub test()
- Dim s$, i&, j&, sTmp$, sm(2), smTmp(2), n, x&, y&, m0Max, m0Min, m1Max, m1Min
- x = 144: y = 54
- s = "0011111!!0!!111!11!!1!011!!0001!10000!101111!!0!11!0!!10!00!!1!!!00100000!1!10!1!10!1111!!0!!10!110!0!!10011!!001!1!01!11!000!100000110!!!0010100110!!0!000010110!!01110"
- Retry:
- For i = 1 To Len(s)
- If Mid(s, i, 1) = "0" Then
- sm(0) = sm(0) + 1
- ElseIf Mid(s, i, 1) = "1" Then
- sm(1) = sm(1) + 1
- Else
- sm(2) = sm(2) + 1
- End If
- Next i
- For i = 1 To Len(s)
- n = Mid(s, i, 1)
- If n <> "!" Then
- smTmp(n) = smTmp(n) + 1
- Else
- m0Max = smTmp(1) * y + (sm(1) - smTmp(1)) * x + (sm(2) - smTmp(2) - 1) * x + smTmp(2) * y
- m0Min = smTmp(1) * y + (sm(1) - smTmp(1)) * x
- m1Max = smTmp(0) * x + (sm(0) - smTmp(0)) * y + (sm(2) - smTmp(2) - 1) * y + smTmp(2) * x
- m1Min = smTmp(0) * x + (sm(0) - smTmp(0)) * y
- If m0Min > m1Max Then
- Mid(s, i, 1) = 1
- smTmp(1) = smTmp(1) + 1
- sm(1) = sm(1) + 1
- sm(2) = sm(2) - 1
- ElseIf m1Min > m0Max Then
- Mid(s, i, 1) = 0
- smTmp(0) = smTmp(0) + 1
- sm(0) = sm(0) + 1
- Else
- smTmp(2) = smTmp(2) + 1
- End If
- End If
- Next i
- If InStr(s, "!") Then GoTo Retry
- Debug.Print s
- End Sub
复制代码 |
|