本帖最后由 FF7 于 2012-2-12 23:51 编辑
既然是研究算法,那我凑个热闹,支持爱疯的精华帖步伐。弄个纯数组运算:编辑提示:以下代码可延伸到计算0到9这10个数字最大连续及其次数的统计。
- Sub xx()
- Dim t As Integer, n As Integer, x As Integer, y As Integer, strA As String,a(),Arr
- Arr = Array(0, 1, 1, 1, 0, 0, 2, 2, 1, 3, 3, 0, 0, 1, 1, 1, 2, 3, 0, 2)
- t = 999
- ReDim a(0 To 9, 0 To 1)
- For i = 0 To UBound(Arr)
- If Arr(i) <> t Then
- t = Arr(i)
- n = 1
- If y < Arr(i) Then y = Arr(i)
- Else
- n = n + 1
- If x < n Then x = n: ReDim Preserve a(0 To 9, 0 To x)
- End If
- If n > a(t, 0) Then a(t, 0) = n
- a(t, n) = a(t, n) + 1
- Next
-
- For m = 0 To y
- strA = strA & m & "最大连续" & a(m, 0) & "次,这种连续总共出现" & a(m, a(m, 0)) & "次。" & Chr(10)
- Next
- MsgBox strA
- End Sub
复制代码
代码二:
统计数组中,所有元素最大连续及其出现的次数(数字和字母混编):
- Sub yy()
- Dim dc As Object
- Set dc = CreateObject("Scripting.dictionary")
- Arr = Array(0, 1, 1, "A", "A", 1, 0, 0, 2, 2, "中", "中", "国", 1, 3, 3, 0, 0, 1, 1, 1, 2, 3, 0, 2, "A", "A", "B", "B", "C", "A", "A")
- Dim i As Integer, n As Long, x As Integer
- For i = 0 To UBound(Arr)
- If Not dc.exists(Arr(i)) Then dc(Arr(i)) = n: n = n + 1
- Next
-
- b = dc.keys
- Dim a()
- ReDim a(0 To dc.Count, 0 To 1)
- strA = ""
- For i = 0 To UBound(Arr)
- If Arr(i) <> strA Then
- strA = Arr(i)
- n = 1
- Else
- n = n + 1
- If x < n Then x = n: ReDim Preserve a(0 To dc.Count, 0 To x)
- End If
- If n > a(dc(strA), 0) Then a(dc(strA), 0) = n
- a(dc(strA), n) = a(dc(strA), n) + 1
- Next
-
- strA = "所有元素最大连续及其出现次数统计:"
- For i = 0 To UBound(b)
- strA = strA & Chr(10) & b(i) & "--最大连续" & a(dc(b(i)), 0) & "次,其出现的次数为" & a(dc(b(i)), a(dc(b(i)), 0)) & "次"
- Next
- MsgBox strA
- End Sub
复制代码
|