Dim $aArray[17] = [51, 8, 13, 2, 52, 61, 37, 85, 19, 11, 7, 62, 22, 38, 79,1,0]
GUICreate("", 400, 620)
GUICtrlCreateEdit("", 10, 10, 380, 600)
$coo = 0 ;存储计算次数
$com = 0
$begin = TimerInit();开始计时
mimi(0, 0, "")
$dif = TimerDiff($begin);结束记时
GUICtrlSetData(-1, "计算耗时: " & $dif&@CRLF,1)
GUICtrlSetData(-1, "总计计算了"&$coo&"次加法运算"&@CRLF,1)
GUICtrlSetData(-1, "正确结果有"&$com&"种算法"&@CRLF,1)
GUISetState()
While GUIGetMsg() + 3
WEnd
Func mimi($k, $resd, $txtd)
For $i = $k To UBound($aArray) - 1
$resx = $resd + $aArray[$i]
$txtx = $txtd & $aArray[$i] & "+"
$coo += 1
If $resx <= 102 Then
mimi($i + 1, $resx, $txtx)
ElseIf $resx > 102 And $resx < 106 Then
GUICtrlSetData(-1, StringReplace($txtx & "=", "+=", "=") & $resx&@CRLF,1)
$com += 1
;~ --------------------------------下边这句必须加上的-----------------------
mimi($i + 1, $resx, $txtx)
;~ 之所以犯错,就是因为afan的题目直接是103,104两个结果,这两个相差为1,并且它提供的数组里面正好没有1,所以测试一下结果对上46就以为通过了
;~ 不加上面这句,如果得到一个51+13+2+19+11+7=103的结果,1在7之前,可以把1算上,1在7之后,就不会去计算了
;~ 假如题目要求是100,110之间的结果,那么比如51+13+2+19+11+5+7=108这样的结果就不会得到,
;~ 只会得到51+13+2+19+11+5=101,符合结果范围,就不在去加后边的7了,因为7小于10
;~ 本代码上面的数组你把最后那个0去掉,就会发现结果是140个,因为添加了一个0,所以140个结果每个加上0,还是符合的,所以结果翻了一倍变成280个了.
EndIf
Next
EndFunc ;==>mimi