标题:求数据组合代码
只看楼主
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
结帖率:76.81%
已结贴  问题点数:20 回复次数:17 
求数据组合代码

在3个数组中按条件取相应元素组合:
Create Table b1 (m1 C(2),m2 C(2),m3 C(2),m4 C(2),m5 C(2),m6 C(2))
Dimension k1(3),k2(2),k3(4)
k1(1)=a1
k1(2)=a2
k1(3)=a3

k2(1)=b1
k2(2)=b2

k3(1)=c1
k3(2)=c2
k3(3)=c3
k3(4)=c4

组合条件如: 数组k1取2个,k2取1个,k3取3个
组合在表中如:
m1  m2  m3  m4  m5  m6
a1  a2  b1  c1  c2  c3
a1  a2  b1  c1  c2  c4
.......

求代码,谢谢!!

搜索更多相关主题的帖子: 数据 组合 数组 条件 代码 
2020-08-11 17:17
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:2 
规则说的不是很清楚

坚守VFP最后的阵地
2020-08-11 19:34
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
见上面例,有3组数,第一组k1有3个元素,第二组k2有2个元素,第三组k3有4个元素,从k1中取2个元素,k2中取1个元素,k3中取3个元素组成一组数,也就是组成了表中的一条记录。
也就是分别从k1,k2,k3中分别取出相应个数了的元素(总数是6个),把这些组合全部列出来,就是记录的总数。
2020-08-11 20:15
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
数组k1有3个元素,每次取2个共有3种取法,
数组k2有2个元素,每次取1个共有2种取法,
数组k3有4个元素,每次取3个共有4种取法,
3个数组中每次取的元素个数之和为6个,即为一种组合,也就是一条记录,
要求把所有组合的元素(6个一组)全部列出来。
元素之和6个一组是固定的,但数组K有可能是3个或2个,每个数组k中元素个数是变化的。
2020-08-11 20:33
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:2 
k1,k2,k3 各数组元素是否固定为3,2, 4,还是另有变化

坚守VFP最后的阵地
2020-08-11 20:53
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
回复 5楼 sdta
k1,k2,k3内的元素个数有变化,数组k1,k2,k3有时缺1个,但元素之和6个是固定的。
示例结果:
2020-08-11 21:13
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:14 

共24条记录
代码如下
程序代码:
Get(3, 2, "a", "1")
Get(4, 3, "c", "2")
Create Table b1 (m1 C(2),m2 C(2),m3 C(2),m4 C(2),m5 C(2),m6 C(2))
FOR lnk = 1 TO 2
    SELECT temp1
    SCAN 
        SELECT temp2
        SCAN 
            INSERT INTO b1 VALUES (temp1.S01, temp1.S02, "b" + STR(lnk, 1), temp2.S01, temp2.S02, temp2.S03)
        ENDSCAN
    ENDSCAN
ENDFOR
SELECT b1
BROWSE 
RETURN 
* 
FUNCTION Get(ln1, ln2, lc1, lc2)
    * 说明
    * 数据范围:ln1
    * 列数范围:ln2
    * ln1 > ln2
    CREATE CURSOR t1 (hm C(2))
    FOR lnj = 1 TO ln1
        INSERT INTO t1 VALUES (lc1 + TRANSFORM(lnj))
    ENDFOR
    *
    cStr = ""
    cField = ""
    cFrom = ""
    cOrder = ""
    cSql = ""
    cWhere = ""
    FOR lnj = 1 TO ln2
        cStr = "S" + PADL(lnj, 2, "0")
        cField = cField + IIF(EMPTY(cField), "", ", ") + cStr + ".hm As " + cStr
        cFrom = cFrom + IIF(EMPTY(cFrom), "", ", ") + "t1 " + cStr
        cWhere = cWhere + cStr + ".hm" + " AND " + cStr + ".hm < "
        cOrder = cOrder + IIF(EMPTY(cOrder), " ", ", ") + TRANSFORM(lnj)
    ENDFOR
    cWhere = SUBSTR(cWhere, 12, LEN(cWhere) - 25)
    cSql = "SELECT " + cField + " FROM " + cFrom + " WHERE " + cWhere + " ORDER BY " + cOrder + " INTO CURSOR temp" + lc2
    EXECSCRIPT(cSql)
ENDFUNC 

坚守VFP最后的阵地
2020-08-11 21:27
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
方法不是最优,总算能解决楼主的问题

坚守VFP最后的阵地
2020-08-11 21:31
fdqzy
Rank: 1
等 级:新手上路
帖 子:354
专家分:0
注 册:2016-8-15
得分:0 
回复 7楼 sdta
辛苦版主,有几个问题说明一下
1、元素中的a1,a2,c1,c2,等只是个顺序代号,不是具体元素名称,也可能代表78,99等数字或商品名称
2、每次从k1,k2,k3内所取元素的个数不一定是2,1,3;也可能是2,2,2或0,4,2.但总数是6
应该怎样解决、麻烦了!!
2020-08-11 21:41
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
不知楼主是否看了5楼的回帖

坚守VFP最后的阵地
2020-08-11 21:45



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




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

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