|
本帖最后由 魚。。 于 2021-5-25 20:41 编辑
vba的也优化一下,也是按照取每列前4来进行排列:
- Sub Fish3()
- Dim aa, bb(1 To 256) As Long
- Dim i&, j&, k&, l&, n&, temp#, t, MaxV&
- t = Timer
- aa = [a2:d16]
- '--------------------------------> 添加行号:
- For j = 1 To 4
- For i = 1 To 15
- aa(i, j) = aa(i, j) + i / 100
- Next
- Next
- '--------------------------------------------> 数据排序:
- For j = 1 To 4
- For i = 2 To 15
- temp = aa(i, j)
- For k = i - 1 To 1 Step -1
- If aa(k, j) >= temp Then Exit For
- aa(k + 1, j) = aa(k, j)
- Next
- aa(k + 1, j) = temp
- Next
- Next
- '--------------------------------------------------------------------------------> 组合前4:
- For i = 1 To 4
- For j = 1 To 4
- For k = 1 To 4
- For l = 1 To 4
- If aa(i, 1) \ 1 - aa(i, 1) <> aa(j, 2) \ 1 - aa(j, 2) And aa(i, 1) \ 1 - aa(i, 1) <> aa(k, 3) \ 1 - aa(k, 3) _
- And aa(i, 1) \ 1 - aa(i, 1) <> aa(l, 4) \ 1 - aa(l, 4) And aa(j, 2) \ 1 - aa(j, 2) <> aa(k, 3) \ 1 - aa(k, 3) _
- And aa(j, 2) \ 1 - aa(j, 2) <> aa(l, 4) \ 1 - aa(l, 4) And aa(k, 3) \ 1 - aa(k, 3) <> aa(l, 4) \ 1 - aa(l, 4) Then
- If (aa(i, 1) \ 1) * (aa(j, 2) \ 1) * (aa(k, 3) \ 1) * (aa(l, 4) \ 1) > MaxV Then
- MaxV = (aa(i, 1) \ 1) * (aa(j, 2) \ 1) * (aa(k, 3) \ 1) * (aa(l, 4) \ 1)
- End If
- End If
- Next l
- Next k
- Next j
- Next i
- MsgBox "乘积最大值是:" & MaxV & ",用时" & Format(Timer - t, "0.0000秒")
- End Sub
复制代码
|
|