遍历m个数中取n个 所有组合 (m<n)
遍历m个数中取n个 所有组合 (m<n)例如
{1 8 15 30 55 60 78 96}8个数中取4个。
求大神给思路。 参见 http://www.autoitx.com/forum.php?mod=viewthread&tid=12470&highlight=
使用函数_ArrayCombinations 本帖最后由 netegg 于 2014-11-8 19:55 编辑
创建一个二进制数,有4个1和4个0,按大小顺序排列(也就是从00001111~11110000)(十进制15~240),所有的相应位置是1的表示选中该数。为0表示该数没选中 本帖最后由 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
非常感谢 whitehead、netegg 2位解答。
问题解决了。{:face (239):} 本帖最后由 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
稍微修改了下 不对呀,好像看错题了,M<N ?什么意思?这样还怎么遍历
页:
[1]