如何求二维数组不同行不同列元素和的最大值
如何求M行N列二维数组不同行不同列元素和的最大值!请各位高手给出思路,能给出实现的代码更好,非常感谢!!
不同行不同列?那规律呢??
总得要有一个规律吧。
2维数组,在内存中排列是一个平面的排列,标记成2维数组,只是便于访问而以。
找不到最大下标等等情况,那就尝试使用一维数组来做吧。
Option Explicit Private Type jg h As Long l As Long v As Long End Type Private Sub Command1_Click() '定义变量 Dim fj() As String '输入的数据分解数组 Dim dat() As Long '中间数据,一维数组 Dim dat2() As Long '二维数组 Dim jg() As jg '保存结果值 Dim hi As Long '多少行列,正方形 Dim s As String '字符串,输入和输出时用 Dim i As Long, j As Long 'j为数据总个数 Dim k As Long Dim m As Long, n As Long Dim o As Long, o2 As Long '结果计数 Dim j1 As jg '中间结果 s = Trim(Text1.Text) '取输入值 s = Replace(s, vbCrLf, " ") '去掉回车 s = Trim(s) '使用DO来去掉多余的空格 i = 0 Do While i <> Len(s) i = Len(s) s = Replace(s, " ", " ") Loop fj = Split(s, " ") '分解 j = UBound(fj) '取个数 hi = Int(Sqr(j + 1)) '计算行数和列数,按正方形计算,直接开平方 ReDim dat(j) '重定义1维数组,用于保存原始数据 For i = 0 To j dat(i) = Val(fj(i)) '读原始数据 Next i ReDim jg(1 To j + 1, 1 To hi + 1) '结果数组 ReDim dat2(1 To hi, 1 To hi) '每次使用的临时数组 For i = 1 To hi '第一个元素是固定 For k = 1 To hi o2 = (i - 1) * hi + k '计算该元素应该是第几个结果 For m = 1 To hi '复制数组 For n = 1 To hi dat2(m, n) = dat((m - 1) * hi + n - 1) Next n Next m With jg(o2, 1) '把结果写到第1个元素中去 .v = dat2(i, k) .h = i .l = k End With o = 2 '从第2个元素开始计算 For m = 1 To hi '清理第一个元素使用了的行和列中的数据 dat2(i, m) = 0 dat2(m, k) = 0 Next m Do '循环查找后面的数据开始 j1.v = 0 '查找剩余数据的最大值 For m = 1 To hi For n = 1 To hi If dat2(m, n) > j1.v Then With j1 '找到,先不管三七二十一,保存再说 .v = dat2(m, n) .h = m .l = n End With End If Next n Next m jg(o2, o) = j1 '保存刚找到的数据 For m = 1 To hi '照样,清理掉刚最大值对应的行列 dat2(jg(o2, o).h, m) = 0 dat2(m, jg(o2, o).l) = 0 Next m o = o + 1 '下一个元素 Loop While o < hi + 1 '没有结束时,就继续查找 For m = 1 To hi '计算当前行的结果 jg(o2, hi+1).v = jg(o2, hi+1).v + jg(o2, m).v Next m Next k Next i o = 1 '先假设第1个结果是最大的 s = "" For i = 1 To j + 1 '查找结果中的最大值 If jg(o, hi+1).v < jg(i, hi+1).v Then o = i End If For k = 1 To hi - 1 '同时生成每行的 输出信息 s = s & jg(i, k).v & "+" Next k s = s & jg(i, hi).v & "=" & jg(i, hi + 1).v & vbCrLf Next i s = s & vbCrLf & vbCrLf '空一行 s = s & o & vbCrLf '输出第几个结果 For k = 1 To hi - 1 '输出结果内容 s = s & jg(o, k).v & "+" Next k s = s & jg(o, hi).v & "=" & jg(o, hi + 1).v & vbCrLf Text2.Text = s '显示 End Sub