第1个回答 2010-02-11
2^(n-1)-1种,以下是vbscript代码,可以直接保存为vbs文件运行,Combination函数使用递归法计算组合,可能效率不是很好,str="ABCD"这句改了就可以计算更多组合
if instr(wscript.fullname,"WScript") then
WScript.CreateObject("WScript.Shell").run("cscript """&wscript.scriptfullname&"""")
else
wscript.echo "方案 第一个容器 第二个容器"
set regex=new regexp
str="ABCD"
e=cint(len(str)\2)
s=0
RegEx.Global = True
for d=1 to e
cmb=Combination(str,d)
g=ubound(cmb)
if d=e and (len(str) mod 2=0) then g=g\2
for f=0 to g
s=s+1
RegEx.Pattern="["&cmb(f)&"]"
wscript.echo s&" "&cmb(f)&" "RegEx.replace(str,"")
next
next
wscript.echo s
wscript.stdin.readline
end if
Function Combination(str, num)
If num < 0 Or num > Len(str) Then num = Len(str)
If num <= 1 Then
Combination = ToCharArray(str)
Else
Dim tmparr()
carr = ToCharArray(str)
For i = 0 To UBound(carr) - num + 1
lstarr = Combination(Mid(str, i + 2), num - 1)
On Error Resume Next
Count = UBound(tmparr) + 1
On Error GoTo 0
ReDim Preserve tmparr(Count + UBound(lstarr))
For j = 0 To UBound(lstarr)
If lstarr(j) <> "" Then tmparr(Count + j) = carr(i) & lstarr(j)
Next
Next
Combination = tmparr
End If
End Function
Function ToCharArray(str)
count = Len(str) - 1
If count = -1 Then
ToCharArray = Array("")
Else
Dim tarr()
ReDim tarr(count)
For i = 0 To count
tarr(i) = Mid(str, i + 1, 1)
Next
ToCharArray = tarr
End If
End Function本回答被提问者采纳