|
发表于 2012-5-5 11:29
|
显示全部楼层
本楼为最佳答案
楼主附件数据 137期的计算结果。- Sub test()
- Dim i%, j%, k%, m%, n%, a%, b%, c%
-
- arr = Sheet2.[a1].CurrentRegion '获取表2各期数据
- m = UBound(arr) '最大行位置
-
- ReDim brr%(2 To m, 1 To 12) '整理各期原始数据到数组brr,便于高效计算比对
- For i = 2 To m
- For j = 1 To 5
- brr(i, arr(i, j)) = 1 '算法关键:把各期数据拆分放置到相应1-12列位置
- Next
- Next
-
- n = Application.Combin(12, 3) '计算12选3最大组合数
- ReDim crr(1 To n, 1 To 4) '定义存放结果的数组crr
-
- For a = 1 To 10
- For b = a + 1 To 11
- For c = b + 1 To 12
- k = k + 1 '高效获取12选3组合结果
- For i = 2 To m '遍历数组brr,比对已经按列整理好的各期数据。
- If brr(i, a) * brr(i, b) * brr(i, c) Then '如果含有该组合
- crr(k, 1) = crr(k, 1) + 1 '【出现次数+1】
- If crr(k, 4) > crr(k, 2) Then crr(k, 2) = crr(k, 4) '比对并储存【最大遗漏】
- crr(k, 3) = crr(k, 4) '更新【上次遗漏】
- crr(k, 4) = 0 '重置【最新未出】
- Else
- crr(k, 4) = crr(k, 4) + 1 '【最新未出数+1】
- End If
- Next
- Next c, b, a
-
- Sheet1.[b2].Resize(n, 4) = crr '输出结果到工作表
- End Sub
复制代码 我的算法 在这里 无人能匹敌。
|
评分
-
查看全部评分
|