-1

我有一个 vb6 函数,最多需要 7 个数字,对它们进行排序,找到一个共同点。在这个数字序列中会有一个间隙。我还想找出丢失的号码。

示例输入是19,17,20,and 16. 输出应该是16,17,18,19,20这个顺序的数组。有什么帮助吗?我可能能够将 vb.net 代码解释为 vb6,但我更喜欢 vb6。

4

2 回答 2

1

以下是需要做的事情的概要:

  • 找到最小和最大的数
  • 创建一个包含足够条目的数组来保存从最小到最大的整个范围
  • 用从最低到最高的数字填充数组。

请注意,您根本不需要对数字进行排序。你只需要找到极值。

这是VB6中的代码大纲:

Function RangeFrom(ParamArray Numbers() As Long) As Long()
    Dim Lowest As Long
    Dim Highest As Long
    Lowest = Numbers(0)
    Highest = Numbers(0)

    Dim Number As Long
    For Each Number In Numbers
        If Number < Lowest Then Lowest = Number
        If Number > Highest Then Highest = Number
    Next

    Dim Result(0 To Highest - Lowest) As Long

    Dim I As Long
    For I = 0 To Highest - Lowest
        Result(I) = Lowest + I
    Next

    FromRange = Result
End Function
于 2013-04-18T12:16:27.917 回答
1

由于您也标记了 VB.NET,这应该可以转换为 VB6(我已经避免使用 Linq):

Public Shared Function FillGaps(input As Int32()) As Int32()
    Dim output = New List(Of Int32)
    Array.Sort(input)
    ' now we'll find the min/max-values at the first/last indices
    For i As Int32 = input(0) To input(input.Length - 1)
        output.Add(i)
    Next
    Return output.ToArray()
End Function

按以下方式使用它:

Dim intArray = {19, 17, 20, 16}
intArray = FillGaps(intArray)

请注意,这种方法会跳过重复项。

于 2013-04-18T12:26:20.020 回答