本帖最后由 3mile 于 2010-7-30 16:19 编辑
石头问题,来个枚举1000米以内的可能。Local $temp,$fin
For $n=1 To 1000
$temp=Enumerate($n)
If Not @error Then
$fin&=$temp&"块石头"&"需要走"&$n&"米"&@CRLF
EndIf
Next
$input=InputBox("",$fin,"300","",200,400)
$Res=Enumerate($input)
If @error=1 Then
MsgBox(0,"","输入数据无解"&@CRLF&"输入框上有1000米以内枚举结果")
Else
MsgBox(0,0,"共有石头:"&Enumerate($input))
EndIf
Func Enumerate($m)
Dim $i = 1, $a, $y,$Result
While 1;计算一半石头数
$a += $i * 2;累加计算一半石头总里程数
$y = 2 * $a - $i;因为从右边开始取石头,则两边总里程数-最右边到中间的里程数
If $y = $m Then;判断结果
ExitLoop
ElseIf $y > $m Then ;数据溢出
$i = $m + 1;定义出错标志
ExitLoop
EndIf
$i+= 1
WEnd;循环结束
If $i <> $m + 1 Then
$Result = 2 * $i + 1
Return $Result
Else
Return SetError(1,0,"")
EndIf
EndFunc
|