非典男人
发表于 2010-1-20 12:25:18
都是牛人 顶一下
顽固不化
发表于 2010-1-20 12:25:53
第一个计算耗时:333.820359850204 毫秒。
看来我的电脑老了点
sanmoking
发表于 2010-1-20 12:32:30
回复sanmoking
高手就是高手,学习了~!
afan 发表于 2010-1-20 12:24 http://www.autoitx.com/images/common/back.gif
我是菜鸟啊,老大,可不是高手,接触au3之前什么都不懂的。。。。。正则都不会,dos也不会,api跟wmi都分不清。。。。
顽固不化
发表于 2010-1-20 12:38:26
我是菜鸟啊,老大,可不是高手,接触au3之前什么都不懂的。。。。。正则都不会,dos也不会,api跟 ...
sanmoking 发表于 2010-1-20 12:32 http://www.autoitx.com/images/common/back.gif
不管怎样,你的代码很干练的。
递归我也考虑,但想了半天无果
sanmoking
发表于 2010-1-20 12:40:57
啥叫递归?
顽固不化
发表于 2010-1-20 13:09:48
啥叫递归?
sanmoking 发表于 2010-1-20 12:40 http://www.autoitx.com/images/common/back.gif
函数自己调用自己
catcher
发表于 2010-1-20 13:26:13
看看高深的东西
雨林GG
发表于 2010-1-20 14:09:26
高手有高招,俺菜鸟自叹不如!
kodin
发表于 2010-1-20 15:50:11
:face (13):我刚试了一下自己写一个,发现居然要NN秒...
supersp
发表于 2010-1-20 16:37:30
本帖最后由 supersp 于 2010-1-20 16:54 编辑
我这里跑起来71ms...应该还能更快一点
#Include <Array.au3>
$begin = TimerInit()
Dim $aArray =
_ArraySort($aArray)
Global $mArray,$oArray,$display
$oArray=0
For $v1 In $aArray
Switch $v1
Case 1 To 57
_ArrayAdd($mArray,$v1)
Case 58 To 105
_ArrayAdd($oArray,$v1)
EndSwitch
Next
_ArrayDelete($mArray, 0)
For $v2 = 0 To UBound($oArray)-1
_xh($oArray[$v2],String($oArray[$v2]),UBound($mArray))
Next
Func _xh($var,$str,$n)
For $i = $n To 0 Step -1
$num = Execute("$var + $mArray[$i]")
Switch $num
Case 105 To 1500
ContinueLoop
Case 102 To 105
_ArrayAdd($display,$str&"+"&String($mArray[$i])&"="&String($num))
Case 1 To 102
_xh($num,$str&"+"&String($mArray[$i]),$i-1)
EndSwitch
Next
EndFunc
_ArrayDelete($display, 0)
$dif = TimerDiff($begin)
_ArrayDisplay($display,"耗时:"&$dif)
supersp
发表于 2010-1-20 16:56:55
本帖最后由 supersp 于 2010-1-20 17:03 编辑
试了把 UBound($mArray) 单独提出来赋值,速度提高了3ms左右
编译exe后,运行..34ms..
=.=
来点分吧..
afan
发表于 2010-1-20 17:30:04
回复 25# supersp
很不错的,就是前面多了个0(15个数字中并未包含0),还有,之前可能没说清楚,数值范围应该是大于102,小于105,也就是103 or 104。
效率的确高,感谢参与~!
llztt
发表于 2010-1-20 17:45:56
现在流行玩算法啊,呵呵
supersp
发表于 2010-1-20 17:46:03
有个0 是因为 我把 58-105之间的数字 x 提出来了, 因为 x 只会用到一次,用到2次就肯定超过105了,所以不用参与递归
这点提高不少效率,但是不用到 x ,只1-57 之间的数字 y自加也会有符合的值,所以我添加了一个0,表示 x 数组没有参与计算..
当然0在输出时,可以想办法去掉
还有排序数组后,当数字较小的都>105时,那么排在后面较大的数字就肯定不符合了
所以 _xh($num,$str&"+"&String($mArray[$i]),$i-1) 上标参数就是$i-1, 在下次循环时就剔除了当前数字,和排在这个数字后面的部分。
这也提高不少效率。
至于103.104 判断改下就可以了
afan
发表于 2010-1-20 17:52:35
回复 29# supersp
嗯,解释得很详细,学习~