20个字母分到两个容器里面,有多少种组合怎么算?

20个字母分到两个容器里面,有多少种组合怎么算?
两个容器一样,字母不分前后,只算组合。
比如ABCD四个字母放到两个容器,有7种放法
方案 第一个容器 第二个容器
1 A BCD
2 B ACD
3 C ABD
4 D ABC
5 AB CD
6 AC BD
7 AD BC
我只自己数了3个字母有3种方案,4个字母7种方案,5个字母15种方案,那如果是10个字母,20个字母呢,数学式子应该怎么算?
如果在程序里面怎么做呢?

我要组合的是20个数,每个数还要做后面的运算。
谢谢迷路的糊涂虫。只是,我是初学者,希望能得到具体的程序……
我不是求有多少种方案,我需要把这些方案都列出来,因为我要对每种方案做下面的计算……
兄弟们啊……我希望得到具体的程序啊。应该怎么 for for for怎么 next next next的。

我来告诉你4个的怎么算,20的就能类推了。
首先你两个盒子不区分,且至少放1个字母
这样可能有A盒子1个,B盒子仨
或A盒子2个,B盒子也两个。
其实就是4÷2=2
如果是5的话 5÷2=2.5取整为2
即A1 B4 和A2 B3两种(A B不区分)

然后做计算
4个字母的情况,A盒子1个,B盒子仨,就是“C41”(不懂你有没学A 和C,C41就代表在4个元素里不分顺序地随便取1个,计算公式是Cab=(a×(a-1)×…×(a-b+1)÷(b!)),C41=4
然后是A盒子2个,B盒子也两个,就是C42=6,因为AB不分,所以再除以2,是3。同理,当AB两盒子字母数一样时,这就计算就重复算了一遍,所以要除2

4+3=7
所以4个字母就是7了。

20字母的话,就是C20 1+C20 2+…+(C20 10÷2)=20+190+…… 后面我不算了呵。。
温馨提示:答案为网友推荐,仅供参考
第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本回答被提问者采纳
第2个回答  2010-02-08
方法数量=2^(字母数量-1)-1
例如20个字母

方法数量=2^(20-1)-1

得方法数量=524287

也就是说20个字母,按照你那个方法,有524287种组合
第3个回答  2010-02-09
这个··如果是两个容器时不一样的且不能为空的情况下,总数不用说是2^20-2,具体算法为你只要看第一个容器放的是什么有几种不同的方法好了,按排列组合算法来说为:C20(1)+C20(2)+……+C20(19)=2^20-2 括号内为上标的···
第4个回答  2010-02-08
C(n,r)=n!/((n-r)!*r!)
这个式子的意思是从n中取出r个元素的方案数目
取几个数字就把r换一下,然后全部相加就行了
老套的办法.....就想到这种......
n!是阶乘
相似回答