找回密码
 加入
搜索
查看: 1298|回复: 2

[效率算法] 一道排列组合的计算题【已解决】

[复制链接]
发表于 2018-3-11 14:42:35 | 显示全部楼层 |阅读模式
本帖最后由 fenhanxue 于 2018-3-12 00:13 编辑

假设给定了100个一维数组(每个数组所包含的元素个数以及元素内容        是给定的),
每个数组的名字是有规律的,以        "$array_"加序号        的格式命名        ,
但每个数组所包含的元素个数以及元素内容,是没有任何规律,如:
Global $array_1[3] = ['1A','1B','1C']
Global $array_2[1] = ['2A']
Global $array_3[2] = ['3A','3B']
Global $array_4[1] = ['4A']
...
Global $array_100[3] = ['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[0]        & $array_2[0]& $array_3[0]                即        '1A2A3A'
2.        $array_1[0]        & $array_2[0]& $array_3[1]                        '1A2A3B'
3.        $array_1[1]        & $array_2[0]& $array_3[0]                        '1B2A3A'                               
4.        $array_1[1]        & $array_2[0]& $array_3[1]                        '1B2A3B'
5.        $array_1[2]        & $array_2[0]& $array_3[0]                        '1C2A3A'
6.        $array_1[2]        & $array_2[0]& $array_3[1]                        '1C2A3B'

注:此处的1A  1B 1C 2A 3A 3B  之类的,是为了方便举例,才这样简写,实际是没有规律的随机长度的字符串
发表于 2018-3-11 20:08:58 | 显示全部楼层
合并两个数组成新数组,再与下一个数组合并,依次类推,直到到达指定序号即可。
 楼主| 发表于 2018-3-12 00:13:14 | 显示全部楼层
回复 2# afan


    感谢A版指点
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-16 19:32 , Processed in 0.072495 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表