|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
Option Explicit
'6+4=4
'答案1,0+4=4
'答案2,8-4=4
'依次是原式、原式的备份、原式被改变1次、结果
Dim ExpBk, Exp, Change1, Result
Dim SelfDic, AddDic, DelDic
'入口
Sub huocai()
Dim i
Call CreateData
Exp = InputBox("移动一根火柴,使其成立", "", "3+6=3")
Result = "原式:" & Exp & vbLf
For i = 1 To Len(Exp)
Call Mov(i, SelfDic)
Call Mov(i, AddDic, True)
Next i
MsgBox IIf(Len(Result) > Len(Exp) + 5, Result, "没办法"), , "结果"
End Sub
'创建数据
Private Sub CreateData()
Exp = ""
ExpBk = ""
Change1 = ""
'1. 自变:改变自身,变为另一个数
Set SelfDic = CreateObject("scripting.dictionary")
SelfDic("0") = Array(6, 9)
SelfDic("2") = Array(3)
SelfDic("3") = Array(2, 5)
SelfDic("5") = Array(3)
SelfDic("6") = Array(0, 9)
SelfDic("9") = Array(0, 6)
SelfDic("+") = Array("=")
SelfDic("=") = Array("+")
'2-1. 可加:增加一根火柴,变为另一个数
Set AddDic = CreateObject("scripting.dictionary")
AddDic("0") = Array(8)
AddDic("1") = Array(7)
AddDic("3") = Array(9)
AddDic("5") = Array(6, 9)
AddDic("6") = Array(8)
AddDic("9") = Array(8)
AddDic("-") = Array("=", "+")
'2-2. 可减:减少一根火柴,变为另一个数
Set DelDic = CreateObject("scripting.dictionary")
DelDic("6") = Array(5)
DelDic("7") = Array(1)
DelDic("8") = Array(0, 6, 9)
DelDic("9") = Array(3)
DelDic("+") = Array("-")
DelDic("=") = Array("-")
End Sub
'移动(位置, 字典, 是否两次变化)
'Again的 Flase用于自变,True用于因变
Sub Mov(i, Dic, Optional Again As Boolean = False)
Dim ch, t, j, k
ch = Mid(Exp, i, 1)
If Dic.exists(ch) Then
t = Dic(ch)
For j = LBound(t) To UBound(t)
Change1 = Exp
Mid(Change1, i, 1) = t(j)
If Again Then
ExpBk = Exp
Exp = Change1
For k = 1 To Len(Exp)
If k <> i Then Call Mov(k, DelDic)
Next k
Exp = ExpBk
End If
If IsEqual(Change1) Then Result = Result & vbLf & Change1
Next j
End If
End Sub
'判断等式两边的和,是否相等
Function IsEqual(str) As Boolean
Dim A, B, i, j, str2
If UBound(Split(str, "=")) = 1 Then
str2 = Replace(str, "-", "+-")
A = Split(str2, "=")
For i = 0 To 1
B = Split(A(i), "+")
A(i) = 0
For j = 0 To UBound(B)
A(i) = Val(A(i)) + Val(B(j))
Next j
Next i
IsEqual = A(0) = A(1)
End If
End Function
36.rar
(101.34 KB, 下载次数: 2)
好像避免了 3+6=3 的错误,但我还是不太清晰
|
|