使用Excel VBA求解满足数位唯一要求的3*X=Y等式问题
Excel VBA 求解符合条件的数字对X、Y
问题要求
需要同时满足以下所有条件:
- 满足等式
3 * X = Y - X为4位正整数,Y为5位正整数
- 等式包含0至9的全部10个数字
- 所有数字在等式中仅可出现1次
实现思路
- 先缩小X的遍历范围:要满足Y是5位正整数,即
3*X >= 10000,计算得X最小取值为3334,最大取值为4位整数上限9999,大幅减少无效遍历 - 每次遍历计算对应的Y值,将固定数字3、X的4位数字、Y的5位数字拼接为总长度为10的字符串
- 校验拼接后的字符串是否无重复字符,且覆盖0-9所有数字,符合条件的即为解
完整VBA代码
Sub FindUniqueXY() Dim X As Long, Y As Long Dim allDigits As String Dim dict As Object Dim i As Integer, isMatch As Boolean ' 创建字典用于数字去重校验 Set dict = CreateObject("Scripting.Dictionary") ' X遍历范围:3334到9999 For X = 3334 To 9999 Y = 3 * X ' 跳过Y超出5位整数的情况 If Y > 99999 Then GoTo NextLoop ' 拼接所有出现的数字 allDigits = "3" & CStr(X) & CStr(Y) If Len(allDigits) <> 10 Then GoTo NextLoop ' 重置校验状态和字典 dict.RemoveAll isMatch = True For i = 1 To 10 digit = Mid(allDigits, i, 1) ' 存在重复数字直接判定不匹配 If dict.Exists(digit) Then isMatch = False Exit For End If dict.Add digit, 1 Next i ' 符合所有条件则输出结果 If isMatch And dict.Count = 10 Then ' 结果输出到工作表A列 Range("A" & Range("A" & Rows.Count).End(xlUp).Row + 1) = "3 * " & X & " = " & Y ' 结果同时输出到VBA立即窗口 Debug.Print "3 * " & X & " = " & Y End If NextLoop: Next X Set dict = Nothing MsgBox "查找完成,结果已输出到当前工作表A列和VBA立即窗口" End Sub
运行方法
- 打开Excel,按
Alt + F11打开VBA编辑器 - 右键点击左侧工程窗口,选择「插入」-「模块」
- 将上述代码粘贴到模块窗口中
- 按
F5运行代码,返回Excel界面即可在A列看到结果
运行结果
符合所有条件的解共2组:
3 * 5694 = 170823 * 6918 = 20754
内容的提问来源于stack exchange,提问作者Aminoooox
相关产品推荐
相关产品推荐

