You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

运行方法

  1. 打开Excel,按Alt + F11打开VBA编辑器
  2. 右键点击左侧工程窗口,选择「插入」-「模块」
  3. 将上述代码粘贴到模块窗口中
  4. 按F5运行代码,返回Excel界面即可在A列看到结果

运行结果

符合所有条件的解共2组:

  • 3 * 5694 = 17082
  • 3 * 6918 = 20754

内容的提问来源于stack exchange,提问作者Aminoooox

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:54:03