首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

好手求最优算法,取数存入另一数组

2013-09-13 
高手求最优算法,取数存入另一数组有一组数如下(不确定数目),按4个为一小组,取出其中最大的数,存入另一个数

高手求最优算法,取数存入另一数组
有一组数如下(不确定数目),按4个为一小组,取出其中最大的数,存入另一个数组b
 Dim a As Integer() = {6, 2, 3, 7, 4, 1, 8, 10, 5, 9, 6, 3, 9, 3, 6}

[解决办法]

Public Function funx() As Integer()
        Dim a As Integer() = {6, 2, 3, 7, 4, 1, 8, 10, 5, 9, 6, 3, 9, 3, 6}
        Dim b As Integer()
        Dim int_blen As Integer = 1
        Dim maxNum = a(0)
        Dim index_b As Integer = -1

        If a.Length Mod 4 = 0 Then
            int_blen = Int(a.Length / 4)
        Else
            int_blen = Int(a.Length / 4) + 1
        End If
        ReDim b(int_blen - 1)
        Try
            For i As Integer = 0 To a.Length - 1
                If i Mod 4 = 0 And a(0) <> maxNum Then '每次到第五个数时,将前四个数的最大值存入b中
                    index_b = index_b + 1
                    b(index_b) = maxNum
                    maxNum = a(i)
                    Continue For


                Else
                    If a(i) > maxNum Then
                        maxNum = a(i)
                    End If
                End If
            Next
            If maxNum <> a(index_b) Then
                index_b = index_b + 1
                b(index_b) = maxNum
            End If

        Catch ex As Exception
            MsgBox(ex.ToString)
        End Try
       
        Return b
    End Function


[解决办法]
Dim b As Integer() = a.Select(Function(x, i) New With { .x = x, .i = i })
      .GroupBy(Function(x) x.i \ 4).SelectMany(Function(x) x.Select(Function(y) y.x).OrderByDescending(Function(y) y).Take(2)).ToArray()  
[解决办法]
引用:
Dim a As Integer() = {6, 2, 3, 7, 4, 1, 8, 10, 5, 9, 6, 3, 9, 3, 6}
        Dim b(3) As Integer
        Dim count As Integer = 0
        Dim result As New ArrayList

        If a.Length >= 4 Then
            Do
                Array.Copy(a, count, b, 0, 4)


                Array.Sort(b)
                result.Add(b(3))
                count = count + 4
            Loop Until a.Length - count < 4
        End If



用   For i As Integer = 0 To b.Length - 1

            MsgBox(b(i))
        Next
得出结果是3 5 6 9 ,正确应该是 7 10 9 9 

朋友,你遍历错了,应该对result集合进行遍历。以下代码:
For Each r As Integer In result
            Console.WriteLine(r)
        Next
得出的结果是:7,10,9。我没领会你的要求,对最后三个数,没有去求最大值了。所以结果只得出3个数字。只要稍微修改一下代码就可以了。

热点排行