Arrays 如何找到一组三个或三个以上的数字?

Arrays 如何找到一组三个或三个以上的数字?,arrays,vba,algorithm,integer,Arrays,Vba,Algorithm,Integer,你能帮我在一个给定的列表中找到一组三个以上的数字,总和为X吗 Fx列表1,2,3,4,5,6,7,8,9中总和为6的一组树数将为1+2+3 我可以用下面的两个数字se VBA代码来实现这一点 Function Set(list As Range, x As Integer) k = 0 j = 0 For Each i In list If x = list(1 + k) + list(list.Rows.Count - j) Then Set = k &

你能帮我在一个给定的列表中找到一组三个以上的数字,总和为X吗

Fx列表1,2,3,4,5,6,7,8,9中总和为6的一组树数将为1+2+3

我可以用下面的两个数字se VBA代码来实现这一点

Function Set(list As Range, x As Integer)
  k = 0
  j = 0
  For Each i In list
    If x = list(1 + k) + list(list.Rows.Count - j) Then
      Set = k & ", " & j 
    ElseIf list(1 + k) + list(list.Rows.Count - j) > x Then
      j = j + 1
    ElseIf list(1 + k) + list(list.Rows.Count - j) < x Then
      k = k + 1
    End If
  Next i
End Function
函数集(列表为范围,x为整数)
k=0
j=0
对于列表中的每个i
如果x=list(1+k)+list(list.Rows.Count-j),则
Set=k&“,”&j
ElseIf list(1+k)+list(list.Rows.Count-j)>x然后
j=j+1
ElseIf list(1+k)+list(list.Rows.Count-j)
致意 克雷斯滕

也许

Function myPair(list As Range, x As Integer)
    Dim vDB, vR(1 To 3)
    Dim i As Long, n As Long, k As Long
    vDB = list
    n = UBound(vDB, 1)
    For i = 1 To n
        For j = i + 1 To n
            For k = j + 1 To n
                If vDB(i, 1) + vDB(j, 1) + vDB(k, 1) = x Then
                    vR(1) = vDB(i, 1): vR(2) = vDB(j, 1): vR(3) = vDB(k, 1)
                    myPair = Join(vR, ",")
                End If
            Next k
        Next j
    Next i

End Function

一对三个数字
这是什么?[9,12200]是一对三个数字numbers@Kresten在英语中,“pair”总是精确地描述两个项目。一个更通用的术语是tuple,或者set(如果顺序不重要的话,如您的示例中所示)。谢谢。我没有意识到,太棒了!谢谢。这当然在
O(n^3)
时间内有效,但你可以做得更好:使用表格查找查看
如果vDB(i,1)+vDB(j,1)
匹配某个整数
k
x-vDB(k,1)
。这需要在开始循环之前,将
k=1
n
x-vDB(k,1)
预处理到表中。