标题:请教多机联合运算问题
只看楼主
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
试了一下,取1000次有1、2次机会,取10000次机会还不少。
不知有无算错
程序代码:
DIMENSION aSum[8]
DIMENSION a208[208]

FOR n = 1 TO 1000
    IF EMPTY(a208)
        DIMENSION a208[208]
        FOR ai = 1 TO 208
            a208[ai] = ai
        ENDFOR
    ENDIF
    FOR i = 1 TO 8
        aSum[i] = _Rand(@a208)
    ENDFOR
    IF (aSum[1]+aSum[2]+aSum[3]+aSum[4]+aSum[5]+aSum[6]+aSum[7]+aSum[8]) == 836
        *ASORT(aSum)
        ? aSum[1], aSum[2], aSum[3], aSum[4], aSum[5], aSum[6], aSum[7], aSum[8]
        *EXIT
    ENDIF
ENDFOR
RETURN

FUNCTION _Rand(a208)
    IF EMPTY(a208)
        RETURN 0
    ENDIF
    LOCAL up, ai, ret
    up = ALEN(a208) - 1
    ai = INT(up * RAND() + 1)
    ret = a208[ai]
    ADEL(a208, ai)
    IF up > 0
        DIMENSION a208[up]
    ENDIF
    RETURN ret
ENDFUNC
2015-03-27 21:05
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
楼上的取法,不能取出所有组合的数据

坚守VFP最后的阵地
2015-03-27 21:30
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用sdta在2015-3-27 21:30:09的发言:

楼上的取法,不能取出所有组合的数据

要随机取所有的组合,就看这个 n 了。
2015-03-27 21:33
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:10 
可以试一下随机取得所有的组合时 n 有多少?
程序代码:
CREATE CURSOR d208 (c208 C(32))
INDEX ON c208 TAG c208
DIMENSION aSum[8]
DIMENSION a208[208]

FOR n = 1 TO 100000
    IF EMPTY(a208)
        DIMENSION a208[208]
        FOR ai = 1 TO 208
            a208[ai] = ai
        ENDFOR
    ENDIF
    FOR i = 1 TO 8
        aSum[i] = _Rand(@a208)
    ENDFOR
    IF (aSum[1]+aSum[2]+aSum[3]+aSum[4]+aSum[5]+aSum[6]+aSum[7]+aSum[8]) == 836
        ASORT(aSum)
        s208 = PADL(aSum[1],4," ")+PADL(aSum[2],4," ")+PADL(aSum[3],4," ")+PADL(aSum[4],4," ");
             + PADL(aSum[5],4," ")+PADL(aSum[6],4," ")+PADL(aSum[7],4," ")+PADL(aSum[8],4," ")
        IF !SEEK(s208)
            INSERT INTO d208 VALUES (s208)
            *IF RECCOUNT() == 所有组合数
            *    EXIT
            *ENDIF
        ENDIF
        *? aSum[1], aSum[2], aSum[3], aSum[4], aSum[5], aSum[6], aSum[7], aSum[8]
        *EXIT
    ENDIF
ENDFOR
GO TOP 
BROWSE
RETURN

FUNCTION _Rand(a208)
    IF EMPTY(a208)
        RETURN 0
    ENDIF
    LOCAL up, ai, ret
    up = ALEN(a208) - 1
    ai = INT(up * RAND() + 1)
    ret = a208[ai]
    ADEL(a208, ai)
    IF up > 0
        DIMENSION a208[up]
    ENDIF
    RETURN ret
ENDFUNC
2015-03-27 22:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-443165-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.347424 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved