pcbar 发表于 2009-5-14 09:10:03

感兴趣的话,研究一下这个
http://www.autoitx.com/forum.php?mod=viewthread&tid=4775

文白 发表于 2009-5-14 12:24:26

;看意思 好象是求 密码暴力破解的组合算法啊!
Global $g_StringChar = [,,]

; Example :
Global $g_Return = _CompesiteArray("2", 3), $g_Temp
For $g_I = 0 To UBound($g_Return)-1
        $g_Temp = $g_Return[$g_I]
        For $g_J = 1 To $g_Temp
                ConsoleWrite($g_Temp[$g_J] & " ")
        Next
        ConsoleWrite(@CRLF)
Next

; $s_Length = 长度
; $s_Flags = 1 数字
;                       2 大写字母
;                       4 小写字母
Func _CompesiteArray($s_Length = Default, $s_Flags = Default)
        Local $s_Error = 0, $s_Return = "", $s_KeyWord
       
        If $s_Length = Default Or StringLen($s_Length) = 0 Or Number($s_Length) = 0 Then
                _ErrorReport("$s_Length", "Wrong Format")
                $s_Error += 1
        Else
                $s_Length = Number($s_Length)
        EndIf
       
        If $s_Flags = Default Or StringLen($s_Flags) = 0 Or Number($s_Flags) = 0 Then
                _ErrorReport("$s_Flags", "Wrong $s_Flags Param")
                $s_Error += 2
        EndIf
       
        If Not $s_Error Then
                For $s_I = 0 To 2
                        If BitAND($s_Flags, 2^$s_I) Then
                                _CreateKeyWord($s_KeyWord, $s_I)
                        EndIf
                Next
                If StringLen($s_KeyWord) = 0 Then
                        _ErrorReport("$s_Flags", "Not Include $s_Flags : 1 2 or 4")
                        $s_Error += 4
                EndIf
        EndIf
       
        If Not $s_Error Then
                Local $s_Temp[$s_Length]
                For $s_I = 0 To $s_Length-1
                        $s_Temp[$s_I] = _CreateArray($s_KeyWord, $s_I+1)
                Next
                $s_Return = $s_Temp
        EndIf
        Return SetError($s_Error, 0, $s_Return)
EndFunc

Func _CreateKeyWord(ByRef $s_KeyWord, $s_Flags)
        For $s_I = $g_StringChar[$s_Flags] To $g_StringChar[$s_Flags]
                $s_KeyWord &= Chr($s_I)
        Next
EndFunc

Func _CreateArray($s_KeyWord, $s_Length)
        $s_KeyWord = StringSplit($s_KeyWord, "", 2)
        Local $s_Return = , $s_Counter[$s_Length], $s_Valve = 1, $s_Dimension = UBound($s_KeyWord)
        While $s_Valve
                For $s_I = $s_Length-1 To 1 Step -1
                        If $s_Counter[$s_I] = $s_Dimension Then
                                $s_Counter[$s_I-1] += 1
                                $s_Counter[$s_I] = 0
                        EndIf
                Next
                If $s_Counter = $s_Dimension Then
                        $s_Valve = 0
                Else
                        $s_Return += 1
                        ReDim $s_Return[$s_Return+1]
                        $s_Return[$s_Return] = _CreateString($s_Counter, $s_KeyWord)
                EndIf
                $s_Counter[$s_Length-1] += 1
        WEnd
        Return $s_Return
EndFunc

Func _CreateString($s_Array, $s_KeyWord)
        Local $s_Return
        For $s_I = 0 To UBound($s_Array) - 1
                $s_Return &= $s_KeyWord[$s_Array[$s_I]]
        Next
        Return $s_Return
EndFunc

Func _ErrorReport($s_Error, $s_Report)
        ConsoleWrite("! ErrorReport : " & $s_Error & " (" & $s_Report & ") !" & @CRLF)
EndFunc

lynfr8 发表于 2009-5-14 15:51:53

好贴,收藏学习下!
页: 1 [2]
查看完整版本: 求数字1~9从1位至9位的组合算法