排列组合问题
时 间:2009-10-13 08:38:50
作 者:wanshan ID:1445 城市:上海
摘 要:排列组合问题
正 文:
1.本例是利用位运算,把所有的结果列出来,然后根据元素是否出现得到结果,这个虽然不是最高效的,但是这个代码简单;
2.本列计算20个元素约需14秒,每多一个用时增加一倍,少一个减少一半;
3.实际应用于数据统计,比如财务回款。如银行回款1000元,又没有标发票号码(实际应用中经常这样),但是可能是几张发票的组合,这时候财务人员就很头疼了,不知道到底是那几张单子该注销,此时就可以用到本方法;
4.原来用剪枝法、迭代法写了两天都没有搞定,网上也没有找到更好的办法,就本问题如果哪位朋友有更好的办法,欢迎分享,谢谢!
5.为了测试方便,根据元素个数,自动生产一个连续数组,如:输入5,生成一个1,2,3,4,5的数组进行运算,实际应用中可用记录集给数组赋值。
代码如下:
Dim a() As Integer '数组
Dim i, j, k As Integer '循环变量
Dim total As Integer '元素总数
Dim result As Integer '结果值
Dim result0 As Integer '中间值,循环时与结果值比较
Dim temp As Integer '判断位置上是否有对应元素
Dim str As String '中间结果
Dim display As String '最终结果
Dim c As Integer '计数器
Dim t As Date '记录开始时间
t = Now()
total = txtTotal
result = txtResult
c = 0
'给数组赋值
ReDim a(total)
For i = 1 To total
a(i) = i
Next
'----------
For j = 1 To 2 ^ total
result0 = 0
str = ""
For k = 1 To total
'temp = IIf((j And (2 ^ (k - 1))) = 0, 0, a(k)) '实践证明,用iif没有if then 快
If (j And (2 ^ (k - 1))) = 0 Then: temp = a(k): Else: temp = 0
If temp <> 0 Then str = str & "+" & temp
result0 = result0 + temp
Next
If result0 = result Then
display = display & result & " = " & Right(str, Len(str) - 1) & vbCrLf
c = c + 1
End If
Next
Me.Text3.Value = "共找到" & c & "个满足条件的组合,用时" & DateDiff("s", t, Now()) & "秒。结果如下:" & vbCrLf & vbCrLf & _
"--------------" & vbCrLf & _
display & _
"=============="
Access软件网官方交流QQ群 (群号:54525238) Access源码网店
常见问答:
技术分类:
源码示例
- 【源码QQ群号19834647...(12.17)
- Access对子窗体数据进行批...(10.30)
- 最精简的组合框行来源数据快速输...(10.25)
- Access仿平台的多值选择器...(10.24)
- 【Access日期区间段查询】...(10.22)
- 【Access源码示例】VBA...(10.12)
- Access累乘示例,Acce...(10.09)
- 数值8.88,把整数8去掉,转...(10.08)
- 【Access自定义函数】一个...(09.30)
- 【Access选项卡示例】Ac...(09.09)
学习心得
最新文章
- Access快速开发平台--使用组...(11.25)
- Access快速开发平台--对上传...(11.22)
- Access快速开发平台企业版--...(11.18)
- 不会用多表联合查询,多表查询没结果...(11.16)
- 【案例分享】主键字段值含有不间断空...(11.16)
- Access快速开发平台--后台D...(11.14)
- 微软Access邀测新Monaco...(11.12)
- Access列表框左右互选、列表框...(11.11)
- 高效率在导入数据前删除记录(11.10)
- Access报价单转订单示例代码(11.08)