4个数计算24点

 

Option Explicit

Public Function Cal24P(n1 As Long, n2 As Long, n3 As Long, n4 As Long) As String
    Dim A(3) As Double
    Dim Op(3) As String
   
    A(0) = n1
    A(1) = n2
    A(2) = n3
    A(3) = n4
   
    Op(0) = n1
    Op(1) = n2
    Op(2) = n3
    Op(3) = n4
   
   
        Cal24P = CalxTmp(A, Op, 3)
   
End Function

Private Function CalxTmp(A() As Double, Op() As String, ByVal mMax As Long) As String
    Dim i As Long, j As Long, K As Long, L As Long
    Dim m As Double
    Dim s As String, s1 As String
    Dim bMarch As Boolean
   
    Dim B() As Double
    Dim OpTmp() As String
   
    ReDim B(mMax - 1)
    ReDim OpTmp(mMax - 1)
   
   
    For i = 0 To mMax
        For j = 1 To mMax
            If i <> j Then
                L = 0
                For K = 0 To mMax
                    If K <> i And K <> j Then
                        B(L) = A(K)
                        OpTmp(L) = Op(K)
                        L = L + 1
                    End If
                Next
               
               
                m = A(i) + A(j)
                OpTmp(mMax - 1) = "(" & Op(i) & "+" & Op(j) & ")"
                If mMax = 1 Then
                    If Abs(m - 24) < 0.00000001 Then
                        CalxTmp = OpTmp(mMax - 1)
                        Exit Function
                    End If
                Else
                    B(mMax - 1) = m
                    CalxTmp = CalxTmp(B, OpTmp, mMax - 1)
                End If
               
                If CalxTmp <> "" Then Exit Function
                m = A(i) - A(j)
                OpTmp(mMax - 1) = "(" & Op(i) & "-" & Op(j) & ")"
                If mMax = 1 Then
                    If Abs(m - 24) < 0.00000001 Then
                        CalxTmp = OpTmp(mMax - 1)
                        Exit Function
                    End If
                Else
                    B(mMax - 1) = m
                    CalxTmp = CalxTmp(B, OpTmp, mMax - 1)
                End If
               
                If CalxTmp <> "" Then Exit Function
                m = A(j) - A(i)
                OpTmp(mMax - 1) = "(" & Op(j) & "-" & Op(i) & ")"
                If mMax = 1 Then
                    If Abs(m - 24) < 0.00000001 Then
                        CalxTmp = OpTmp(mMax - 1)
                        Exit Function
                    End If
                Else
                    B(mMax - 1) = m
                    CalxTmp = CalxTmp(B, OpTmp, mMax - 1)
                End If
               
                If CalxTmp <> "" Then Exit Function
                m = A(i) * A(j)
                OpTmp(mMax - 1) = "(" & Op(i) & "*" & Op(j) & ")"
                If mMax = 1 Then
                    If Abs(m - 24) < 0.00000001 Then
                        CalxTmp = OpTmp(mMax - 1)
                        Exit Function
                    End If
                Else
                    B(mMax - 1) = m
                    CalxTmp = CalxTmp(B, OpTmp, mMax - 1)
                End If
               
                If CalxTmp <> "" Then Exit Function
                If A(j) <> 0 Then
                    m = A(i) / A(j)
                    OpTmp(mMax - 1) = "(" & Op(i) & "/" & Op(j) & ")"
                    If mMax = 1 Then
                        If Abs(m - 24) < 0.00000001 Then
                            CalxTmp = OpTmp(mMax - 1)
                            Exit Function
                        End If
                    Else
                        B(mMax - 1) = m
                        CalxTmp = CalxTmp(B, OpTmp, mMax - 1)
                    End If
                End If
               
                If CalxTmp <> "" Then Exit Function
                If A(i) <> 0 Then
                    m = A(j) / A(i)
                    OpTmp(mMax - 1) = "(" & Op(j) & "/" & Op(i) & ")"
                    If mMax = 1 Then
                        If Abs(m - 24) < 0.00000001 Then
                            CalxTmp = OpTmp(mMax - 1)
                            Exit Function
                        End If
                    Else
                        B(mMax - 1) = m
                        CalxTmp = CalxTmp(B, OpTmp, mMax - 1)
                    End If
                End If
            End If
        Next
    Next
End Function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值