模块完整的代码:
程序代码:
[ 本帖最后由 风吹过b 于 2015-6-17 20:31 编辑 ]

Option Explicit Public Type T24type s As String v As Long End Type Public Function Test24_2(a As Long, b As Long, c As Long, d As Long) As String Dim r1(4) As T24type, r2(4) As T24type, r3(4) As T24type Dim l1 As T24type, l2 As T24type Dim l3 As T24type, l4 As T24type Dim i As Long, j As Long, m As Long Dim s As String '第一个数 l1.s = CStr(a) l1.v = a '第二个数 l2.s = CStr(b) l2.v = b '第三个数 l3.s = CStr(c) l3.v = c '第四个数 l4.s = CStr(d) l4.v = d '第一个数与第二个数计算 Call operation(l1, l2, r1) '第一分支,第1、2数运算后与第3、4数运算 '第三个数与第四个数计算 Call operation(l3, l4, r2) For i = 1 To 4 If r1(i).v > 0 Then For j = 1 To 4 If r2(j).v >= 0 Then Call operation(r1(i), r2(j), r3) For m = 1 To 4 If r3(m).v = 24 Then s = s & r3(m).s & " = 24" & vbCrLf End If Next m End If Next j End If Next i '第二分支,第1、2数运算后与第3数运算,再与第4数运算 For i = 1 To 4 If r1(i).v >= 0 Then Call operation(r1(i), l3, r2) For j = 1 To 4 If r2(j).v >= 0 Then Call operation(r2(j), l4, r3) For m = 1 To 4 If r3(m).v = 24 Then s = s & r3(m).s & " = 24" & vbCrLf End If Next m End If Next j End If Next i '先第2、3数运算后,再与第1数运算,第4数运算。 Call operation(l2, l3, r1) For i = 1 To 4 If r1(i).v > 0 Then Call operation(l1, r1(i), r2) For j = 1 To 4 If r2(j).v > 0 Then Call operation(r2(j), l4, r3) For m = 1 To 4 If r3(m).v = 24 Then s = s & r3(m).s & " = 24" & vbCrLf End If Next m End If Next j End If Next i '去掉括号之间的空格 s = Replace(s, "( (", "((") '去多余的空格 Do i = Len(s) s = Replace(s, " ", " ") Loop While Len(s) <> i '去重 Dim fj() As String '分行 fj = Split(s, vbCrLf) '扫描 For i = 1 To UBound(fj) For j = i + 1 To UBound(fj) If fj(i) = fj(j) Then '扫描到后面有相同的 fj(j) = "" '后面的清空 End If Next j Next i '重新组合,不能使用 join 函数是因为有空行在 s = "" For i = 0 To UBound(fj) If Len(fj(i)) > 0 Then s = s & fj(i) & vbCrLf End If Next i Test24_2 = s End Function Public Sub operation(a As T24type, b As T24type, r() As T24type) Dim t As Single '加法 r(1).v = a.v + b.v r(1).s = "( " & a.s & " + " & b.s & " )" '减法,不考虑负数 If a.v > b.v Then r(2).v = a.v - b.v r(2).s = "( " & a.s & " - " & b.s & " )" Else r(2).v = -1 End If '乘法 r(3).v = a.v * b.v 'r(3).s = "( " & a.s & " * " & b.s & " )" r(3).s = " " & a.s & " * " & b.s & " " '除法,只允许整除 If a.v >= b.v And b.v > 0 Then If a.v Mod b.v = 0 Then r(4).v = a.v / b.v ' r(4).s = "( " & a.s & " / " & b.s & " )" r(4).s = " " & a.s & " / " & b.s & " " Else r(4).v = -1 End If Else r(4).v = -1 End If End Sub
[ 本帖最后由 风吹过b 于 2015-6-17 20:31 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了