zjimmy 发表于 2010-3-1 09:06:49

没有什么好思路,只想到土方法解决...

gapkiller 发表于 2010-3-1 12:05:47

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)

lsf1012 发表于 2010-3-1 15:39:38

我是来学习的

pusofalse 发表于 2010-3-1 15:48:59

回复 48# gapkiller


    gapkiller兄测试50ms吗?在我机器上测试16ms,算法果真强大,学习了!

gapkiller 发表于 2010-3-1 16:15:29

回复gapkiller


    gapkiller兄测试50ms吗?在我机器上测试16ms,算法果真强大,学习了!
pusofalse 发表于 2010-3-1 15:48 http://www.autoitx.com/images/common/back.gif

我的是上网本,可能比较慢哈...

yangdai 发表于 2010-3-1 18:04:38

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

zouyingj 发表于 2010-3-1 22:31:05

多谢楼主对我们新人的关心!

zouyingj 发表于 2010-3-1 23:03:44

13楼的方法不错,支持

maple 发表于 2010-3-2 09:16:06

新人路过,不懂,学习下了

lpxx 发表于 2010-3-2 10:00:11

确实,当编程基本功已经扎实,编程技巧日趋熟练,程序的执行效率便又成为程序员一道“门槛”

没有知道 发表于 2010-3-2 14:21:36

:face (3):数学题,弱项:face (3):

rolaka 发表于 2010-3-2 16:56:00

本帖最后由 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):

r98543 发表于 2010-3-2 17:27:23

"IsInt",
我学到了这个,哈哈!

C.L 发表于 2010-3-2 22:38:42

各位的代码很精彩,学习了。

C.L 发表于 2010-3-3 00:36:16

我也来练习一下另类的思路,尝试前面的大大没能提供的算法,可能很少人会这样求勾股,呵呵
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)

页: 1 2 3 [4] 5
查看完整版本: 练习004 - 计算100以内的勾股数