#一、问题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 | 10+20+3*1=3 |
2 | 11+22+3*1=6 |
3 | 13+22+3*1=10 |
4 | 16+23+3*1=15 |
5 | 110+24+3*1=21 |
6 | 115+25+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 | 10+20+31+40+5*1=5 |
2 | 11+21+31+41+5*1=15 |
3 | 15+24+33+42+5*1=35 |
4 | 115+210+36+43+5*1 |
5 | 125+220+310+44+5*1 |
6 | 160+235+315+45+5*1 |