| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2444 人关注过本帖, 1 人收藏
标题:请教整行全排列问题
只看楼主 加入收藏
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
结帖率:73.44%
收藏(1)
已结贴  问题点数:20 回复次数:16 
请教整行全排列问题
请教先生:
我想将表内的整行作不同的排列,现表中只有5行,按全排列知识排成后的结果共应该是120行,可我用代码运行下来怎么会有201600行,请先生指点(代码及表在附件中),谢谢
材料.rar (1.28 KB)
搜索更多相关主题的帖子: 知识 
2016-01-06 08:50
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:7 
回复 楼主 fdxxhjc
是不是这样:
程序代码:
**
** 从n个数中任取m个数的排列
** 当m=n时所有的排列叫全排列
**
n = 5
m = n
CREATE CURSOR tt (ni I)
FOR i = 1 TO n
    INSERT INTO tt Values(i)
ENDFOR
sSELECT = ""
sFROM   = ""
sWHERE  = ""
FOR i = 1 TO m
    sSELECT = sSELECT + ",a"+TRANSFORM(i)+".ni 列"+TRANSFORM(i)
    sFROM   = sFROM   + ",tt a"+TRANSFORM(i)
    IF i < m
        ss = ""
        FOR j = i TO m
            ss = ss + ",a"+TRANSFORM(j)+".ni"
        ENDFOR
        sWHERE  = sWHERE + " AND !INLIST("+SUBSTR(ss,2)+")"
    ENDIF
ENDFOR
EXECSCRIPT("SELECT " + SUBSTR(sSELECT,2) + " " +;
           "FROM "   + SUBSTR(sFROM,2)   + " " +;
           "WHERE "  + SUBSTR(sWHERE,6)  + " " +;
           "INTO CURSOR tmp")
BROWSE NOWAIT
MESSAGEBOX("从"+TRANSFORM(n)+"个数中任取出"+TRANSFORM(m)+"个数的排列共 " + TRANSFORM(RECCOUNT()) + " 种")
2016-01-06 20:45
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
排列数的计算公式是:
P(r, n) = n! / (n - r)!

全排列数的计算公式是:
P(n) = n!

VFP 代码:
Clear
? Factorial(5)  && n!  && 5 的全排列是 120
 
Function Factorial( nNumber As Integer )
    Local nResult
    If nNumber = 0
        nResult = 1
    Else
        nResult = nNumber * Factorial( nNumber - 1 )
    Endif
    Return nResult
Endfunc


 

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-01-06 22:33
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
Clear
Permutation("12345")
*!*    Permutation("BRAD")
*!*    Permutation("ABCDEFGHIJ")  && 警告... 将产生 3.5 百万数的组数!



Function Permutation(tcWord, tcPrefix)  && 排列计算
    If Empty(tcPrefix)
        Clear
        tcPrefix = ""
    Endif

    Do Case
        Case Len(tcWord) = 0
            * 不计算
        Case Len(tcWord)=1
            ?? tcPrefix + tcWord + " "
        Otherwise
            Local xx
            For xx = 1 To Len(tcWord)
                Permutation(Left(tcWord, xx - 1) + Substr(tcWord, xx + 1), tcPrefix + Substr(tcWord, xx, 1))
            Endfor
    Endcase
Endfunc

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-01-06 22:40
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2214
专家分:3882
注 册:2007-4-27
收藏
得分:7 
留足学习,谢谢

只求每天有一丁点儿的进步就可以了
2016-01-08 09:02
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
楼主想用 SQL-Select 语句计算排列和组合的算法,是吗?
好像可以的,下午我试试看。

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-01-08 12:54
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
*!*    5 个数的全排列 (SQL-Select 算法):
Clear
Create Cursor P1 (Num C(1), Digit I)
Insert Into P1 Values ('1', 1)
Insert Into P1 Values ('2', 2)
Insert Into P1 Values ('3', 4)
Insert Into P1 Values ('4', 8)
Insert Into P1 Values ('5',16)

Select Distinct P1.Num + P2.Num + P3.Num + P4.Num + P5.Num As 排列数 From ;
    P1 P1, P1 P2, P1 P3, P1 P4 , P1 P5 ;
    Where P1.Digit + P2.Digit + P3.Digit + P4.Digit + P5.Digit = 31 ;
    Order By 1
? "全排列有 : " + Transform(Reccount())

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-01-08 13:42
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
Clear
Create Cursor Colour (Color C(10))
Insert Into Colour Values ('红')
Insert Into Colour Values ('黑')
Insert Into Colour Values ('白')
Insert Into Colour Values ('绿')
Insert Into Colour Values ('橙')

*!*    组合 : 5 选 2 --> 10 种组合
Select a.Color As 颜色1, b.Color As 颜色2 ;
    FROM  Colour a ;
    JOIN Colour b ;
    ON a.Color < b.Color
? Reccount()


*!*    排列 :  5 选 2 --> 20 种排列
Select a.Color As 颜色1, b.Color As 颜色2 ;
    FROM Colour a ;
    JOIN Colour b ;
    ON a.Color != b.Color

? Reccount()

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-01-08 14:35
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
*!*    5 个数的全排列 (SQL-Select 算法 2):

Clear
Create Cursor P1 (Id C(1))
Insert Into P1 Values ('1')
Insert Into P1 Values ('2')
Insert Into P1 Values ('3')
Insert Into P1 Values ('4')
Insert Into P1 Values ('5')

*!*    5 的全排列 :  120 种排列
Select a.Id As 列1, b.Id As 列2, c.Id As 列3, d.Id As 列4, e.Id As 列5 ;
    From P1 a, P1 b, P1 c, P1 d, P1 e ;
    Where a.Id != b.Id And a.Id != c.Id And a.Id != d.Id And a.Id != e.Id And ;
    b.Id != c.Id And b.Id != d.Id And b.Id != e.Id And ;
    c.Id != d.Id And c.Id != e.Id And ;
    d.Id != e.Id ;
    Order By 列1, 列2, 列3, 列4, 列5
? Reccount()

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-01-08 15:22
aaaaaa
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:796
专家分:937
注 册:2012-9-4
收藏
得分:0 
楼主帖子中的附件好像是对版主:SDTA 发问的,请 SDTA 老师做归纳性、权威性的指教,谢谢。

网友sdta.prg

民工子弟学校22班团小组长阳光模特队长冲锋篮球队前锋小苹果合唱队领唱蓝天舞蹈队编舞
2016-01-09 14:52
快速回复:请教整行全排列问题
数据加载中...
 
   



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

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