m个A,n个B,k个C的所有组合,按照字典排序输出

#一、问题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组合数
110+20+3*1=3
211+22+3*1=6
313+22+3*1=10
416+23+3*1=15
5110+24+3*1=21
6115+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组合数
110+20+31+40+5*1=5
211+21+31+41+5*1=15
315+24+33+42+5*1=35
4115+210+36+43+5*1
5125+220+310+44+5*1
6160+235+315+45+5*1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值