找回密码
 加入
搜索
查看: 2727|回复: 6

[效率算法] 遍历m个数中取n个 所有组合 (m<n)

[复制链接]
发表于 2014-11-8 18:07:41 | 显示全部楼层 |阅读模式
遍历m个数中取n个 所有组合 (m<n)
例如
{1 8 15 30 55 60 78 96}8个数中取4个。
求大神给思路。
发表于 2014-11-8 19:39:05 | 显示全部楼层
参见 http://www.autoitx.com/forum.php ... 2470&highlight=
使用函数  _ArrayCombinations
发表于 2014-11-8 19:45:49 | 显示全部楼层
本帖最后由 netegg 于 2014-11-8 19:55 编辑

创建一个二进制数,有4个1和4个0,按大小顺序排列(也就是从00001111~11110000)(十进制15~240),所有的相应位置是1的表示选中该数。为0表示该数没选中
发表于 2014-11-8 20:19:38 | 显示全部楼层
本帖最后由 netegg 于 2014-11-8 21:04 编辑

[au3]#include<math.au3>

For $i = 15 To 240
        $binary = _inttobin($i)
        If StringInStr(_IntToBin($i), 1, 2, 1, 1) Then
                Local $text = StringReplace($binary, '1', '1')
                Local $iReplacements = @extended
                If $iReplacements = 4 Then ConsoleWrite(StringRight(StringFormat("%08s", $binary),8) & @CR)
        EndIf
Next
[/au3]
 楼主| 发表于 2014-11-8 21:56:24 | 显示全部楼层
非常感谢 whitehead、netegg 2位解答。
问题解决了。
发表于 2014-11-9 05:44:40 | 显示全部楼层
本帖最后由 netegg 于 2014-11-9 06:16 编辑

[au3]#include<math.au3>

Local $a[8] = [1, 8, 15, 30, 55, 60, 78, 96], $ret = '', $result

For $i = 240 To 15 Step -1
        $binary = _inttobin($i)
        If StringInStr(_IntToBin($i), 1, 2, 1, 1) Then
                Local $text = StringReplace($binary, '1', '1')
                Local $iReplacements = @extended
                If $iReplacements = 4 Then
                        $ret = StringRight(StringFormat("%08s", $binary), 8)
                        $aRet = StringSplit($ret, '', 2)
                        For $j = 0 To 7
                                If number($aRet[$j]) Then $result &= $a[$j]  & ', '
                        Next
                        ConsoleWrite(StringTrimRight($result, 2) & @CRLF)
                        $result = ''
                EndIf
        EndIf
Next[/au3]
稍微修改了下
发表于 2014-11-9 09:48:22 | 显示全部楼层
不对呀,好像看错题了,M<N ?什么意思?这样还怎么遍历
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-23 12:02 , Processed in 0.078974 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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