求一算法
本帖最后由 foboy 于 2011-3-18 01:49 编辑现在在做一个棋牌游戏的辅助,里面的玩法需要一个从5个数字里选出3个数的操作,一个人的思路有限,看看大家能做出来的最有效率的代码是什么。
注意,是寻找最有效率的计算方法,过段时间我回来把所有贴出来的代码测试一次运行效率,效率最高的人我会把您的大名写到这里狠狠赞美一番,但是没有物质奖励{:face (303):} .
首先声明,此辅助是收钱给别人做的,但是我不是想利用大家的智慧去自己赚钱。发完帖子后我自己也会去做,做完后才会来论坛查看大家的思路,并贴出自己的代码。
担心你代码被我利用去赚钱的请不要理会此贴。
选数的要求:
从5个数字里选出3个,使这三个数相加的和是10的倍数。这5个数都是1到10之间的整数。
事先定义一个数组,里面的数字是随机的:
Global $g_array
For $i = 0 To 4
$g_array[$i] = Random(1, 10, 1)
Next
请做成一个类似这样的函数:Func _myfunc($_array);$_array是包含5个数的数组
If UBound($_array)<5 Then Return SetError(1,1,0)
;计算代码
;找到符合条件的3个数就以字符串的形式返回其序列,例如前3个满足条件,就返回“123”,后三个数符合条件就返回“345”.注意,一定要返回这三个数的角标,以便知道它是第几张牌。不要返回由这三个数组成的新数组。
;没有符合条件的3个数,就设置@error为1 并返回0
EndFunc
最高效代码是3mile写的,代码在8楼。
下面是我自己写的:
**** Hidden Message *****
调用100次此函数,算出来的平均时间:0.0437982418932512ms
**** Hidden Message ***** 用动态算法:调用自己本身来实现循环,先排除数组里的第一个数,其它的可能组合的数量 + 数组里所有数组合成5-$array的可能的数量($array为第一个数)。这样数组个数一个个地减少 本帖最后由 foboy 于 2011-3-15 14:43 编辑
回复 2# happytc
楼上朋友如果有意参与就请贴代码,不要只是贴点理论纸上谈兵。
因为即使思路相同,代码也会千变万化。 条件限得很死,试一下.
#include <array.au3>
Global $g_array
For $i = 0 To 4
$g_array[$i] = Random(1, 10, 1)
Next
$fin=ten($g_array)
msgbox(0,0,$fin)
func ten($array)
$arraycombinations=_ArrayCombinations($array,3,"+")
for $i=1 to $arraycombinations
if IsInt(Execute($arraycombinations[$i])/10) then return $arraycombinations[$i]
Next
Return "未找到符合"
EndFunc 没有精力帮你完全完成了,方法已经说了。 回复 4# 3mile
调用100次此函数的平均时间:0.428594057951979
**** Hidden Message ***** 进来学习一下 回复 6# foboy
再试试这个
Global $g_array
global $time=TimerInit()
for $k=1 to 100
For $i = 0 To 4
$g_array[$i] = Random(1, 10, 1)
Next
$fin=ten($g_array)
Next
func ten($array)
for $a=0 to 2
for $b=$a+1 to 3
for $c=$b+1 to 4
if mod($array[$a]+$array[$b]+$array[$c],10)=0 then Return $array[$a]&","&$array[$b]&","&$array[$c]
Next
Next
Next
return 0
EndFunc
回复 8# 3mile
100次的平均时间:0.0229276925058093
这个应该是最高效的。
**** Hidden Message ***** 3M的算法无可厚非,
但是楼主不知道在遮遮掩掩什么,棋牌类游戏有个特点,那就是相同的牌是有个数限制的,你也不说明白你要的函数具体实现哪个部分,就叫人写。你就不怕别人写的不是你要的么?如果只是要算法,大可不必拿棋牌游戏说事! 怎么都没安要求返回“下标”? 看看啊,凑字看 受教了~!!! 回複看一下 回复 10# love5173
{:face (125):}说老实话,我连题目的意图都没看明白
页:
[1]
2