读书人

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

发布时间: 2013-09-13 21:12:00 作者: rapoo

高手求最优算法,取数存入另一数组
有一组数如下(不确定数目),按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个数字。只要稍微修改一下代码就可以了。

读书人网 >VB Dotnet

热点推荐