28,391
社区成员
发帖
与我相关
我的任务
分享
Function CreateResult(a,b,m)
Dim result
result=""
n=UBound(a)-1
tempTest =""
j=0
For i=0 To n
tempTest = tempTest & "," & b(i)
j=j+1
If b(i)=1 Then
result = result & "+" & a(i)
End If
Next
CreateResult = result
End Function
Function Combination(a,m) '从数组a中选取m个数进行组合
Dim n,list
Dim b()
n = UBound(a)-1
ReDim b(n) '辅助数组。首先初始化,将数组前m个元素置为1,表示第一个组合为m个数
For i=0 To n
If i<m Then
b(i)=1
Else
b(i)=0
End If
Next
list = list & "|" & CreateResult(a,b,m)
tempEnd = "N"
Do While tempEnd ="N"
findFirst = "N"
swap = "N"
For i=0 To n
L=0
'Call JS_AlertBackEnd(i)
If findFirst="N" And b(i)=1 Then
k=i
findFirst = "Y"
End If
If b(i)=1 And b(i+1)=0 Then
b(i)=0
b(i+1)=1
swap = "Y"
If k<>1 Then
For L=0 To i-k
b(L)=b(k+1)
Next
For L=i-k To i
b(L)=0
Next
End If
If k=i And i=n-m Then
tempEnd = "Y"
End If
End If
If swap="Y" Then
Exit For
End If
Next
list = list & "|" & CreateResult(a,b,m)
Loop
Combination = list
End Function
'总体思路:
'组合算法
'本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标
'代表的数被选中,为0则没选中。
'首先初始化,将数组前n个元素置1,表示第一个组合为前n个数。
'然后从左到右扫描数组元素值的"10"组合,找到第一个"10"组合后将其变为
'"01"组合,同时将其(在本算法中具体指i的位置)左边的所有"1"全部移动到数组的最左端。
'当第一个"1"移动到数组的m-n的位置,即n个"1"全部移动到最右端时,就得
'到了最后一个组合。
'例如求5中选3的组合:
'1 1 1 0 0 //1,2,3
'1 1 0 1 0 //1,2,4
'1 0 1 1 0 //1,3,4
'0 1 1 1 0 //2,3,4
'1 1 0 0 1 //1,2,5
'1 0 1 0 1 //1,3,5
'0 1 1 0 1 //2,3,5
'1 0 0 1 1 //1,4,5
'0 1 0 1 1 //2,4,5
'0 0 1 1 1 //3,4,5
Function Combination(a,m) '从数组a中选取m个数进行组合
Dim n,list
Dim b()
n = UBound(a)
ReDim b(n) '辅助数组。首先初始化,将数组前m个元素置为1,表示第一个组合为m个数
'初始化位运数组,因为asp好像没有位运算,因此添加了一个数组来模拟位运算
For i=0 To n
If i<=m Then
b(i)=1
Else
b(i)=0
End If
Next
b(0)=0
list = list & "|" & CreateResult(a,b,m)
tempEnd = "N"
'初始化结束
Do While tempEnd ="N"
findFirst = "N"
swap = "N"
For i=1 To n
If findFirst="N" And b(i)=1 Then
k=i
findFirst = "Y"
End If
If b(i)=0 And b(i-1)=1 Then
b(i)=1
b(i-1)=0
swap = "Y"
If k<>1 Then
For L=1 To i-k
b(L)=b(L+1)
Next
For L=i-k To i-1
b(L)=0
Next
End If
If k=i-1 And k=n-m Then
tempEnd = "Y"
End If
End If
If swap="Y" Then
Exit For
End If
Next
list = list & "|" & CreateResult(a,b,m)
Loop
Combination = list
End Function
If (i+1)<=n And b(i)=1 And b(i+1)=0 Then '多加一个是否越界的判断