fenhanxue 发表于 2018-3-11 14:42:35

一道排列组合的计算题【已解决】

本帖最后由 fenhanxue 于 2018-3-12 00:13 编辑

假设给定了100个一维数组(每个数组所包含的元素个数以及元素内容        是给定的),
每个数组的名字是有规律的,以        "$array_"加序号        的格式命名        ,
但每个数组所包含的元素个数以及元素内容,是没有任何规律,如:Global $array_1 = ['1A','1B','1C']
Global $array_2 = ['2A']
Global $array_3 = ['3A','3B']
Global $array_4 = ['4A']
...
Global $array_100 = ['100A','100B','100C']假设1 <= i <= 100
依次随机从数组$array_1、$array_2、$array_1、....$array_i 各取一个元素,组成一个字符串,那么
问题1)一共有多少种组合?
问题2)请列出所有的组合结果?



对于问题1,可以这样计算得到:Func _GET_ZUHESHU($i);得到组合数
        ;        1 <= $i <= 100
        Local $zuhe = 1
        For $j = 1 To $i
                $zuhe = $zuhe * Execute('UBound($array_'&$j&')')
        Next
       
        MsgBox(0,'共有组合数:',$zuhe)
EndFunc对于问题2,想了一上午了,想不出好的算法,大家看看有没好的逻辑


=============举例
例如$i = 3
那么问题1的答案应该是        UBound($array_1) * UBound($array_2) *UBound($array_3) = 3*1*2 = 6
问题2的答案应该是:
1.        $array_1        & $array_2& $array_3                即        '1A2A3A'
2.        $array_1        & $array_2& $array_3                        '1A2A3B'
3.        $array_1        & $array_2& $array_3                        '1B2A3A'                               
4.        $array_1        & $array_2& $array_3                        '1B2A3B'
5.        $array_1        & $array_2& $array_3                        '1C2A3A'
6.        $array_1        & $array_2& $array_3                        '1C2A3B'

注:此处的1A1B 1C 2A 3A 3B之类的,是为了方便举例,才这样简写,实际是没有规律的随机长度的字符串

afan 发表于 2018-3-11 20:08:58

合并两个数组成新数组,再与下一个数组合并,依次类推,直到到达指定序号即可。

fenhanxue 发表于 2018-3-12 00:13:14

回复 2# afan


    感谢A版指点
页: [1]
查看完整版本: 一道排列组合的计算题【已解决】