没有什么好思路,只想到土方法解决...
50ms的算法.....
Dim $str='', $start=TimerInit()
For $z=5 To 100 ; 3个数中最大的数
For $x=3 To (($z^2)/2)^0.5 ; 3个数中最小的数
$y = ($z^2-$x^2)^0.5
If IsInt($y) Then $str&=$x&' '&$y&' '&$z&@LF
Next
Next
MsgBox(0,TimerDiff($start),$str)
我是来学习的
回复 48# gapkiller
gapkiller兄测试50ms吗?在我机器上测试16ms,算法果真强大,学习了!
回复gapkiller
gapkiller兄测试50ms吗?在我机器上测试16ms,算法果真强大,学习了!
pusofalse 发表于 2010-3-1 15:48 http://www.autoitx.com/images/common/back.gif
我的是上网本,可能比较慢哈...
dim$StartTime=TimerInit()
dim$m = 100
dim$ary[$m+1]
for$i=1to $m
$ary[$i]=$i
next
$s=""
FOR $i=3 to0.707*$m
$ii=$i*$i
FOR $j=$i+1 to$m-3
$k=($ii+$j*$j)^.5
if $k>$mthen exitloop
if $ary[$k]=$kthen$s&=$i & " " &$j & " " & $k& @CRLF
Next
Next
MsgBox(0,"已用:"&TimerDiff($StartTime),$s)
10 MS
多谢楼主对我们新人的关心!
13楼的方法不错,支持
新人路过,不懂,学习下了
确实,当编程基本功已经扎实,编程技巧日趋熟练,程序的执行效率便又成为程序员一道“门槛”
:face (3):数学题,弱项:face (3):
本帖最后由 rolaka 于 2010-3-2 17:08 编辑
$time = TimerInit()
$r = ""
For $a = 1 To 100
For $b = $a+1 To 100
$c = ($a^2+$b^2)^0.5
If $c <= 100 Then
If ($c & ".1")*1 == $c & ".1" Then
$r &= $a & ' ' & $b & ' ' & $c & @CRLF
EndIf
EndIf
Next
Next
MsgBox(0, TimerDiff($time), $r)
autoit变量类型超乱- - 那就投机取巧一回
Y的au3你就类型乱转把:face (21):
"IsInt",
我学到了这个,哈哈!
各位的代码很精彩,学习了。
我也来练习一下另类的思路,尝试前面的大大没能提供的算法,可能很少人会这样求勾股,呵呵
Dim $t = TimerInit()
$pi = 3.14159265358979
$du = $pi / 180
$result = ""
$temp = 0
For $z = 5 To 100
For $d = 1 To 45
$y = Cos($d * $du)
$b = Int($y * $z)
If $b == $temp Then ContinueLoop
$a = ($z ^ 2 - $b ^ 2) ^ 0.5
If $a > $b Then ContinueLoop
If IsInt($a) Then
$result &= $a & " " & $b & " " & $z & @CRLF
$temp = $b
EndIf
Next
Next
MsgBox(0, TimerDiff($t) & "MS", $result)