一、问题1:将m个A,n个B,k个C,所组合成 的所有字符串按照字典排序输出
解析:
1.先求k个C的组合;
2.然后求1个B,k个C的组合;
3.根据1个B,k个C的组合求2个B,k个C的组合;
4.根据2个B,k个C的组合求3个B,k个C的组合;
5.根据n-1个B,k个C的组合求n个B,k个C的组合;
6.按照同样的方法求出m个A,n个B,k个C所有组合。
解题步骤:
1.求k个C的组合:
只有一种组合CC…C
2.求n个B,k个C的组合:
(1)对n-1个B,k个C的组合进行遍历,在第一位之前添加B,得到一组组合
(2)对上面得到的组合进行遍历,判断第二位是否是B,如果是则将第1,第2位互换,添加到新组合中
(3)对上面得到的组合进行遍历,判断第三位是否是B,如果是则将第2,第3位互换,添加到新组合中
…
(k+1)对上面得到的组合进行遍历,判断第k+1位是否是B,如果是则将第k,第k+1位互换,添加到新组合中
将上面所有得到的组合按照顺序合并即可得到,n个B,k个C字典顺序排列的所有组合。
3.m个A,n个B,k个C的组合:
(1)对n个B,k个C的组合进行遍历,在第一位之前添加A,得到一组组合
(2)对上面得到的组合进行遍历,判断第二位是否是A,如果是则将第1,第2位互换,添加到新组合中
(3)对上面得到的组合进行遍历,判断第三位是否是A,如果是则将第2,第3位互换,添加到新组合中
…
(k+1)对上面得到的组合进行遍历,判断第k+1位是否是A,如果是则将第k,第k+1位互换,添加到新组合中
将上面所有得到的组合按照顺序合并即可得到,m个A,n个B,k个C字典顺序排列的所有组合。
求所有字典排序的组合举例:
2个A,2个B,2个C所有字典排序的组合:
1.先将2个C排序,只有一种:
CC
2.求1个B,2个C的组合:
(1)可以在0个B,2个C的组合前面都加B,得到:
BCC
(2)对上面结果进行遍历,如果第2位不是B则互换1、2位,否则移除该组合,得:
CBC
(3)对上面结果进行遍历,如果第3位不是B则互换2、3位,否则移除该组合,得:
CCB
所以求1个B,2个C的组合总的结果即为:
BCC
CBC
CCB
3.求2个B,2个C的组合:
(1)可以在1个B,2个C的组合前面都加B,得到:
BBCC
BCBC
BCCB
(2)对上面结果进行遍历,如果第2位不是B则互换1、2位,否则移除该组合,得:
CBBC
CBCB
(3)对上面结果进行遍历,如果第3位不是B则互换2、3位,否则移除该组合,得:
CCBB
所以求2个B,2个C的组合总的结果即为:
BBCC
BCBC
BCCB
CBBC
CBCB
CCBB
4.求1个A,2个B,2个C的组合:
参照2、3步骤即可。
二、问题2:求m个A,n个B,k个C,能组合成的所有字符串的个数
1.求n个B,k个C能组合成的所有字符串的个数
(1)当有2个c时,列出一个中间表格,列表示有B的个数,表格中数值乘系数,求和,即可得到组合数量:
中间表规律:Bi=Bi+Bi+…+Bn
B\系数 | 1 | 2 | 3 |
---|---|---|---|
1 | 0 | 0 | 1 |
2 | 1 | 1 | 1 |
3 | 3 | 2 | 1 |
4 | 6 | 3 | 1 |
5 | 10 | 4 | 1 |
6 | 15 | 5 | 1 |
(2)然后由中间表得到最终n个B,2个C组合的数目:
B | 组合数 |
---|---|
1 | 1*0+2*0+3*1=3 |
2 | 1*1+2*2+3*1=6 |
3 | 1*3+2*2+3*1=10 |
4 | 1*6+2*3+3*1=15 |
5 | 1*10+2*4+3*1=21 |
6 | 1*15+2*5+3*1=28 |
2.求m个A,n个B,k个C,能组合成的所有字符串的个数
(1)当有2个B,2个c时,列出一个中间表格,列表示有A的个数,表格中数值乘系数,求和,即可得到组合数量:
下表规律:Ai=Ai+Ai+…+An
A\系数 | 1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|---|
1 | 0 | 0 | 0 | 0 | 1 |
2 | 1 | 1 | 1 | 1 | 1 |
3 | 5 | 4 | 3 | 2 | 1 |
4 | 15 | 10 | 6 | 3 | 1 |
5 | 25 | 20 | 10 | 4 | 1 |
6 | 60 | 35 | 15 | 5 | 1 |
(2)然后由上表得到最终n个B,2个C组合的数目:
B | 组合数 |
---|---|
1 | 1*0+2*0+3*1+4*0+5*1=5 |
2 | 1*1+2*1+3*1+4*1+5*1=15 |
3 | 1*5+2*4+3*3+4*2+5*1=35 |
4 | 1*15+2*10+3*6+4*3+5*1 |
5 | 1*25+2*20+3*10+4*4+5*1 |
6 | 1*60+2*35+3*15+4*5+5*1 |