chenking84 发表于 2014-11-8 18:07:41

遍历m个数中取n个 所有组合 (m<n)

遍历m个数中取n个 所有组合 (m<n)
例如
{1 8 15 30 55 60 78 96}8个数中取4个。
求大神给思路。

whitehead 发表于 2014-11-8 19:39:05

参见 http://www.autoitx.com/forum.php?mod=viewthread&tid=12470&highlight=
使用函数_ArrayCombinations

netegg 发表于 2014-11-8 19:45:49

本帖最后由 netegg 于 2014-11-8 19:55 编辑

创建一个二进制数,有4个1和4个0,按大小顺序排列(也就是从00001111~11110000)(十进制15~240),所有的相应位置是1的表示选中该数。为0表示该数没选中

netegg 发表于 2014-11-8 20:19:38

本帖最后由 netegg 于 2014-11-8 21:04 编辑

#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

chenking84 发表于 2014-11-8 21:56:24

非常感谢 whitehead、netegg 2位解答。
问题解决了。{:face (239):}

netegg 发表于 2014-11-9 05:44:40

本帖最后由 netegg 于 2014-11-9 06:16 编辑

#include<math.au3>

Local $a = , $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
稍微修改了下

netegg 发表于 2014-11-9 09:48:22

不对呀,好像看错题了,M<N ?什么意思?这样还怎么遍历
页: [1]
查看完整版本: 遍历m个数中取n个 所有组合 (m<n)