找回密码
 加入
搜索
楼主: pusofalse

[效率算法] 练习004 - 计算100以内的勾股数

 火... [复制链接]
发表于 2010-3-1 09:06:49 | 显示全部楼层
没有什么好思路,只想到土方法解决...
发表于 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)

评分

参与人数 1金钱 +90 收起 理由
pusofalse + 90 经典。

查看全部评分

发表于 2010-3-1 15:39:38 | 显示全部楼层
我是来学习的
 楼主| 发表于 2010-3-1 15:48:59 | 显示全部楼层
回复 48# gapkiller


    gapkiller兄测试50ms吗?在我机器上测试16ms,算法果真强大,学习了!
发表于 2010-3-1 16:15:29 | 显示全部楼层
回复  gapkiller


    gapkiller兄测试50ms吗?在我机器上测试16ms,算法果真强大,学习了!
pusofalse 发表于 2010-3-1 15:48


我的是上网本,可能比较慢哈...
发表于 2010-3-1 18:04:38 | 显示全部楼层
dim  $StartTime=TimerInit()
dim  $m = 100
dim  $ary[$m+1]
for  $i=1  to $m
     $ary[$i]=$i
next
$s=""
FOR $i=3   to  0.707*$m
    $ii=$i*$i
    FOR $j=$i+1 to  $m-3
        $k=($ii+$j*$j)^.5
        if $k>$m  then exitloop
        if $ary[$k]=$k  then  $s  &=  $i & " " &  $j & " " & $k  & @CRLF
    Next
Next
MsgBox(0,"已用:"&TimerDiff($StartTime),$s)

10 MS

评分

参与人数 1金钱 +90 收起 理由
pusofalse + 90 学习了。

查看全部评分

发表于 2010-3-1 22:31:05 | 显示全部楼层
多谢楼主对我们新人的关心!
发表于 2010-3-1 23:03:44 | 显示全部楼层
13楼的方法不错,支持

评分

参与人数 1金钱 +20 收起 理由
afan + 20 谢谢~ 呵呵

查看全部评分

发表于 2010-3-2 09:16:06 | 显示全部楼层
新人路过,不懂,学习下了
发表于 2010-3-2 10:00:11 | 显示全部楼层
确实,当编程基本功已经扎实,编程技巧日趋熟练,程序的执行效率便又成为程序员一道“门槛”
发表于 2010-3-2 14:21:36 | 显示全部楼层
数学题,弱项
发表于 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你就类型乱转把

评分

参与人数 2金钱 +90 收起 理由
pusofalse + 50 学习了。
gapkiller + 40 好玩,就是字符串比较的时候效率有点慢...

查看全部评分

发表于 2010-3-2 17:27:23 | 显示全部楼层
"IsInt",
我学到了这个,哈哈!
发表于 2010-3-2 22:38:42 | 显示全部楼层
各位的代码很精彩,学习了。
发表于 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金钱 +50 收起 理由
pusofalse + 50 学习了。

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-4-26 05:10 , Processed in 0.075256 second(s), 16 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表