|
发表于 2012-2-2 12:54
|
显示全部楼层
本楼为最佳答案
蓝桥老师的代码,总是太过复杂。- Sub zz()
- tms = Timer
-
- Dim a%, b%, c%, d%, e%, i%, k%, m%, n%
- Dim yl%, zdyl%, zxzdyl%, zxzdylxh$, s$
-
- ' Sheet1.Activate
- arr = [a4].Resize([a65536].End(3).Row - 3, 3)
- n = UBound(arr)
- zxzdyl = n
-
- 'm = WorksheetFunction.Combin(12, 5)
- m = 792
- ReDim brr$(m)
- For a = 1 To 8
- For b = a + 1 To 9
- For c = b + 1 To 10
- For d = c + 1 To 11
- For e = d + 1 To 12
- k = k + 1
- brr(k) = a & ";" & b & ";" & c & ";" & d & ";" & e
-
- yl = 0: zdyl = 0
- For i = 2 To n
- If InStr(";" & brr(k) & ";", ";" & arr(i, 2) & ";") Then
- If yl > zdyl Then zdyl = yl
- yl = 0
- Else
- yl = yl + 1
- End If
- Next
-
- If zdyl < zxzdyl Then
- zxzdyl = zdyl
- zxzdylxh = k
- ElseIf zdyl = zxzdyl Then
- zxzdylxh = zxzdylxh & ";" & k
- End If
-
- If zdyl > zdzdyl Then
- zdzdyl = zdyl
- zdzdylxh = k
- ElseIf zdyl = zdzdyl Then
- zdzdylxh = zdzdylxh & ";" & k
- End If
- Next e, d, c, b, a
-
- x = Split(zxzdylxh, ";")
- s = "Min of MaxLeakNum is : " & zxzdyl & vbCr & "Combin Detail as below : "
- For i = 0 To UBound(x)
- s = s & vbCr & brr(x(i))
- Next
-
- x = Split(zdzdylxh, ";")
- s = s & vbCr & vbCr & "Max of MaxLeakNum is : " & zdzdyl & vbCr & "Combin Detail as below : "
- For i = 0 To UBound(x)
- s = s & vbCr & brr(x(i))
- Next
-
- MsgBox s & vbCr & vbCr & Format(Timer - tms, "0.000s")
-
- End Sub
复制代码 代码运行后,同时统计并列出:
最大遗漏的最小值=1,有2组: 6,7,8,9,11 和 6,8,9,11,12
最大遗漏的最大值=15,有1组: 1,3,4,5,10
运行速度比蓝桥代码快1倍。
|
|