|
vbyou127 发表于 2016-4-20 16:19
你没有必要太过认真
按你的Replace递归算法思路,重新写了一遍。- Sub test4()
- Dim a, s$, ss$, tms#
- tms = Timer
- ss = "123456789"
- For a = 1 To 9
- s = Replace(ss, a, "")
- Call dg(a, s, "", 0)
- Next
- MsgBox Format(Timer - tms, "0.000s ")
- End Sub
- Sub dg(a, s$, bcd, n&)
- Dim e, fghi, i&, j&, k&, s2$, s3$, t$
- If n < 3 Then
- For i = 1 To Len(s)
- t = Mid(s, i, 1)
- Call dg(a, Replace(s, t, ""), bcd & t, n + 1)
- Next
- Else
- For j = 1 To 5
- e = Mid(s, j, 1)
- If a * bcd Mod e = 0 Then
- fghi = a * bcd / e
- If Len(CStr(fghi)) = 4 Then
- s2 = Replace(s, e, "")
- For k = 1 To 4
- If InStr(fghi, Mid(s2, k, 1)) = 0 Then Exit For '用Instr检查效率高
- Next
- If k = 5 Then Debug.Print a; "* "; bcd; " = "; e; " *"; fghi: Exit For
-
- ' For k = 1 To 4
- ' s2 = Replace(s2, Mid(fghi, k, 1), "")
- ' Next
- ' If s2 = "" Then Debug.Print a; "* "; bcd; " = "; e; " *"; fghi: Exit For
- End If
- End If
- Next
- End If
- End Sub
复制代码 |
|