| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 757 人关注过本帖
标题:请教多重循环的次数
只看楼主 加入收藏
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 3楼 吹水佬
先生,不好意思,我又作了修改,附件请以这个为准
请教(请以这个为准).zip (2.88 KB)
2015-04-02 16:48
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:15 
回复 11楼 fdxxhjc
有点深,还是没看懂在算什么。
但每层循环初值是上层计数器的值+1,终值都是hs8,而只是在最内层才取运算结果,这样会出现好多次循环是“白跑”了。
情况好象:(不知有无理解错)
hs = 3
FOR i = 1 TO hs
    ?i
    FOR j = i+1 TO hs
        ?i,j
        FOR k = j+1 TO hs
            ? "运算", i, j, k
        ENDFOR
    ENDFOR
ENDFOR
实际上i,j,k在最内层运算只有一次,而第1层和第2层有好多次是“白跑”的。
效果等同:
hs = 3
FOR i = 1 TO hs - 2
    ?i
    FOR j = i+1 TO hs - 1
        ?i,j
        FOR k = j+1 TO hs
            ? "运算", i, j, k
        ENDFOR
    ENDFOR
ENDFOR

[ 本帖最后由 吹水佬 于 2015-4-2 21:32 编辑 ]
2015-04-02 21:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
算法看象在自然数列中任取n个数的所有组合。
2015-04-03 07:50
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
收藏
得分:0 
回复 13楼 吹水佬
是的,谢谢先生,像您指点的确实可以“少白跑”好多,谢谢了
2015-04-03 09:15
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
回复 14楼 fdxxhjc
也可用递归调用,代码可以精简些。
如从m个自然数列中取出n个数的组合:
程序代码:
CREATE CURSOR dd (ff C(100))
_f(5, 3)    && m=5, n=3
GO TOP 
BROWSE
RETURN

FUNCTION _f(m, n)
    LOCAL i, aa[m]
    FOR i = 1 TO m
        aa[i] = i
    ENDFOR
    IF n > 1
        _ff(@aa, n)
    ELSE
        FOR i = 1 TO ALEN(aa)
            INSERT INTO dd VALUES (TRANSFORM(aa[i]))
        ENDFOR
    ENDIF
ENDFUNC

FUNCTION _ff(aa, n)
    IF ALEN(aa) < n
        RETURN
    ENDIF
    
    LOCAL i, ss, aa2[1]
    ACOPY(aa, aa2)
    
    DO WHILE ALEN(aa2) >= n
        LOCAL aa3[1]
        ACOPY(aa2, aa3)
        
        DO WHILE ALEN(aa3) >= n
            ss = TRANSFORM(aa3[1])
            FOR i = 2 TO n
                ss = ss + "," + TRANSFORM(aa3[i])
            ENDFOR
            INSERT INTO dd VALUES (ss)
            
            ADEL(aa3, n)
            DIMENSION aa3[ALEN(aa3)-1]
        ENDDO
        IF n < 3
            EXIT
        ENDIF
        ADEL(aa2, 2)
        DIMENSION aa2[ALEN(aa2)-1]
    ENDDO
    
    ADEL(aa, 1)
    DIMENSION aa[ALEN(aa)-1]
    _ff(@aa, n)
ENDFUNC


[ 本帖最后由 吹水佬 于 2015-4-4 07:13 编辑 ]
2015-04-03 15:17
快速回复:请教多重循环的次数
数据加载中...
 
   



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

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