pizg 发表于 2011-2-15 11:42:46

1~9數字排列組合

請問如何將1~9的數字,
以5個數為一組,
將所有可能的情況排列出來,
用LISP該如何做呢?

xyp1964 发表于 2011-2-15 12:58:03

组合:
(xyp-List-Combination '(1 2 3 4 5 6 7 8 9) 5)
'((1 2 3 4 5) (1 2 3 4 6) (1 2 3 4 7) (1 2 3 4 8) (1 2 3 4 9) (1 2 3 5 6) (1 2 3 5 7) (1 2 3 5 8) (1 2 3 5 9) (1 2 3 6 7) (1 2 3 6 8) (1 2 3 6 9) (1 2 3 7 8) (1 2 3 7 9) (1 2 3 8 9) (1 2 4 5 6) (1 2 4 5 7) (1 2 4 5 8) (1 2 4 5 9) (1 2 4 6 7) (1 2 4 6 8) (1 2 4 6 9) (1 2 4 7 8) (1 2 4 7 9) (1 2 4 8 9) (1 2 5 6 7) (1 2 5 6 8) (1 2 5 6 9) (1 2 5 7 8) (1 2 5 7 9) (1 2 5 8 9) (1 2 6 7 8) (1 2 6 7 9) (1 2 6 8 9) (1 2 7 8 9) (1 3 4 5 6) (1 3 4 5 7) (1 3 4 5 8) (1 3 4 5 9) (1 3 4 6 7) (1 3 4 6 8) (1 3 4 6 9) (1 3 4 7 8) (1 3 4 7 9) (1 3 4 8 9) (1 3 5 6 7) (1 3 5 6 8) (1 3 5 6 9) (1 3 5 7 8) (1 3 5 7 9) (1 3 5 8 9) (1 3 6 7 8) (1 3 6 7 9) (1 3 6 8 9) (1 3 7 8 9) (1 4 5 6 7) (1 4 5 6 8) (1 4 5 6 9) (1 4 5 7 8) (1 4 5 7 9) (1 4 5 8 9) (1 4 6 7 8) (1 4 6 7 9) (1 4 6 8 9) (1 4 7 8 9) (1 5 6 7 8) (1 5 6 7 9) (1 5 6 8 9) (1 5 7 8 9) (1 6 7 8 9) (2 3 4 5 6) (2 3 4 5 7) (2 3 4 5 8) (2 3 4 5 9) (2 3 4 6 7) (2 3 4 6 8) (2 3 4 6 9) (2 3 4 7 8) (2 3 4 7 9) (2 3 4 8 9) (2 3 5 6 7) (2 3 5 6 8) (2 3 5 6 9) (2 3 5 7 8) (2 3 5 7 9) (2 3 5 8 9) (2 3 6 7 8) (2 3 6 7 9) (2 3 6 8 9) (2 3 7 8 9) (2 4 5 6 7) (2 4 5 6 8) (2 4 5 6 9) (2 4 5 7 8) (2 4 5 7 9) (2 4 5 8 9) (2 4 6 7 8) (2 4 6 7 9) (2 4 6 8 9) (2 4 7 8 9) (2 5 6 7 8) (2 5 6 7 9) (2 5 6 8 9) (2 5 7 8 9) (2 6 7 8 9) (3 4 5 6 7) (3 4 5 6 8) (3 4 5 6 9) (3 4 5 7 8) (3 4 5 7 9) (3 4 5 8 9) (3 4 6 7 8) (3 4 6 7 9) (3 4 6 8 9) (3 4 7 8 9) (3 5 6 7 8) (3 5 6 7 9) (3 5 6 8 9) (3 5 7 8 9) (3 6 7 8 9) (4 5 6 7 8) (4 5 6 7 9) (4 5 6 8 9) (4 5 7 8 9) (4 6 7 8 9) (5 6 7 8 9))

pizg 发表于 2011-2-15 13:55:35

xyp1964 发表于 2011-2-15 12:58 static/image/common/back.gif
组合:
(xyp-List-Combination '(1 2 3 4 5 6 7 8 9) 5)
'((1 2 3 4 5) (1 2 3 4 6) (1 2 3 4 7) (1 2 3...

感謝版主回覆

yxl88168 发表于 2011-5-1 15:06:38

这个有什么用呢,好像用不上

pizg 发表于 2011-5-2 11:03:46

yxl88168 发表于 2011-5-1 15:06 static/image/common/back.gif
这个有什么用呢,好像用不上

呵~~這個可以應用於紙牌遊戲或樂透抽獎。

yxl88168 发表于 2011-5-2 16:07:51

回复 pizg 的帖子

哦,只想着CAD搞模具,还没注意到CAD有这些功能,学习了

qjchen 发表于 2011-5-3 15:29:24

本帖最后由 qjchen 于 2011-5-3 15:32 编辑

翻译了rosettacode的一段递归代码
若各位有兴致的话,也可以看看 Reini Urban(STDLIB作者)的函数
http://autocad.xarch.at/stdlib/COMBINATIONS.LSP


;;;from http://rosettacode.org/wiki/Combinations#Scheme
;;;translated into autolisp by qjchen
(defun combination (lst m)
(cond      ((zerop m) '(()))
      ((null lst) '())
      (T
         (append (mapcar '(lambda (y) (cons (car lst) y))
                         (combination (cdr lst) (- m 1))
               )
               (combination (cdr lst) m)
         )
      )
)
)

(combination '(5 1 2 3 4) 1)

20033535 发表于 2011-5-4 11:18:40

回复 qjchen 的帖子

此代码比较难理解

yjc 发表于 2011-5-24 11:46:02

感谢xyp1964
页: [1]
查看完整版本: 1~9數字排列組合