看到高手们的讨论,确实是感觉到很惭愧.
因为我本来是准备要刁难一下楼主,说了要明年才把代码贴上来的.
代码也写了很多,但VFP对字符串的处理速度确实是有点慢.
15楼的代码也给了我好多好的提示,
比如,VFP自己的数据处理速度上的优势.
因为代码风格比较豪犷,我大概的概括了一下.
大概是先圈一堆近似值,然后计算不同加数的差距,逐渐往最小差距靠近.
速度确实是飞快,我写了几个不同方法的程序,从不能达到这样的速度,自愧不如.
即使我从各个方面给自己找了无数的借口,最后的结果还是甘败下风.
不过,我也很佩服自己服输的勇气,所以还是把自己的代码贴了上来,以供大家贻笑,顺便捞点鸡蛋番茄回家.
USE test.dbf
sum A1 to s0
N=RECCOUNT()
ss=420000
*ss=31649.22
COPY TO ARRAY Y1 FIELDS A1
=ASORT(Y1,1,-1,1)
if ss>s0 or ss<Y1(N) then
return
endif
DIMENSION r(N)
k=1
r(k)=1
s1=Y1(r(k))
DO WHILE !(s1=ss)
IF s1>ss THEN
s1=s1-Y1(r(k))
r(k)=r(k)+1
ELSE
k=k+1
r(k)=r(k-1)+1
ENDIF
DO WHILE r(k)>N
IF k=1 THEN
return
ENDIF
k=k-1
s1=s1-Y1(r(k))
r(k)=r(k)+1
ENDDO
s1=s1+Y1(r(k))
ENDDO
s2=STR(Y1(r(1)),10,2)
FOR i=2 TO k
s2=s2+"+"+STR(Y1(r(i)),10,2)
NEXT
?STRTRAN(s2+"="+STR(EVALUATE(s2),10,2)," ","")
[
本帖最后由 Moz 于 2012-1-1 15:22 编辑 ]