找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1413|回复: 9

[求助] [求助]:[0518]如何求出串列数值中各串列最大一组数值呢?

[复制链接]
发表于 2007-5-18 20:59:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
如:
(SETQ GTQQ(LIST 1 1 1))
(SETQ LTQQ '((51 17 32)
            (28 42 68)
            (53 25 19)
            (12 25 89)) )
求出: _$ (53 42 89)

可以用下列程序求出
(MAPCAR '(LAMBDA (X) (SETQ GTQQ(LIST
(MAX (CAR GTQQ)(CAR X))
(MAX(CADR GTQQ)(CADR X))
(MAX(CADDR GTQQ)(CADDR X))
))) LTQQ)


但是如果为下面这样的串列,非固定的串列值,该怎样处理呢?
(SETQ LSPNB '((11 4 8 17 2 20 22 7 5 12)
              (5 10 2 17 1 20 22 7 5 12)
              (9 6 6 17 1 20 22 7 5 12)
              (9 6 6 17 1 20 22 7 5 12)
              (3 12 17 1 4 11 3 22 7 5 12)
              (9 6 6 17 1 6 13 22 7 5 12)
              (7 8 4 17 1 20 22 7 5 12)
              (9 6 6 17 1 4 11 3 22 7 5 12)
              (7 8 4 17 1 4 11 3 22 7 5 12)
              (9 6 6 17 1 4 11 3 22 7 5 12)
              (1 13 1 15 1 16 3 22 7 5 12)
              (7 8 4 17 1 4 11 3 22 7 5 12)
              (13 2 14 1 4 11 3 22 7 5 12)
              (3 12 1 16 4 4 11 3 20 2 6 6 11)
              (7 8 5 16 4 4 11 3 20 2 6 6 11)
              (5 10 3 16 4 20 20 2 6 6 11)
              (15 13 16 4 20 20 2 6 6 11)
              (1 14 4 13 16 4 20 16 3 2 6 6 11)
              (10 16 2 20 20 2 6 6 11)
              (10 16 2 20 20 2 6 6 11)
              (11 14 17 1 1 20 20 2 6 6 11)
              (3 12 1 16 2 4 15 20 2 6 6 11)
              (13 2 10 16 4 20 20 2 6 6 11)
              (24 18 1 10 18 2 20 22 7 5 12)) )

烦请各位帮忙解答一下
谢谢!!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2007-5-18 23:32:36 | 显示全部楼层
我用vl-sort函数写了一个,虽然麻烦了点,好象还能用,你试试。

(defun lst_sort(lst / n tmp rel l1 l2)
  (setq tmp(VL-SORT lst '(lambda (l1 l2)
                           (> (length l1) (length l2))
                           )
                    )
        );;;按长度排序
  (setq len(length (nth 0 tmp)));;;获取最长数组的长度
  (setq n 0)
  (repeat len
    (setq tmp (vl-sort lst '(lambda (l1 l2)
                              (> (nth n l1) (nth n l2))
                              )
                       )
          ) ;;;_setq
    (setq tmp (nth n (nth 0 tmp)))
    (setq rel (cons tmp rel))
    (setq n(1+ n))
    ) ;;;_repeat   分组排序
  (REVERSE rel) ;;;反序排列
  )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2007-5-19 07:34:00 | 显示全部楼层

  1. (mapcar        '(lambda (x) (apply 'max x))
  2.         '((11 4 8 17 2 20 22 7 5 12)
  3.           (5 10 2 17 1 20 22 7 5 12)
  4.           (9 6 6 17 1 20 22 7 5 12)
  5.           (9 6 6 17 1 20 22 7 5 12)
  6.           (3 12 17 1 4 11 3 22 7 5 12)
  7.           (9 6 6 17 1 6 13 22 7 5 12)
  8.           (7 8 4 17 1 20 22 7 5 12)
  9.           (9 6 6 17 1 4 11 3 22 7 5 12)
  10.           (7 8 4 17 1 4 11 3 22 7 5 12)
  11.           (9 6 6 17 1 4 11 3 22 7 5 12)
  12.           (1 13 1 15 1 16 3 22 7 5 12)
  13.           (7 8 4 17 1 4 11 3 22 7 5 12)
  14.           (13 2 14 1 4 11 3 22 7 5 12)
  15.           (3 12 1 16 4 4 11 3 20 2 6 6 11)
  16.           (7 8 5 16 4 4 11 3 20 2 6 6 11)
  17.           (5 10 3 16 4 20 20 2 6 6 11)
  18.           (15 13 16 4 20 20 2 6 6 11)
  19.           (1 14 4 13 16 4 20 16 3 2 6 6 11)
  20.           (10 16 2 20 20 2 6 6 11)
  21.           (10 16 2 20 20 2 6 6 11)
  22.           (11 14 17 1 1 20 20 2 6 6 11)
  23.           (3 12 1 16 2 4 15 20 2 6 6 11)
  24.           (13 2 10 16 4 20 20 2 6 6 11)
  25.           (24 18 1 10 18 2 20 22 7 5 12)
  26.          )
  27. )
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-19 08:22:40 | 显示全部楼层
谢谢您 hb198075
您写的方法我还真是没有想过
想不到可以用垂直向的排序
利害
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-20 04:02:30 | 显示全部楼层
[php]
;; 按最长元素.
(defun tt (lst / n a lst2)
  (setq n (apply 'max (mapcar 'length lst)))
  (repeat n
    (setq n    (1- n)
          a    (apply 'max (vl-remove 'nil(mapcar '(lambda (x) (nth n x)) lst)))
          lst2 (cons a lst2)
    )
  )
)
(tt lspnb) -> (24 18 17 20 20 20 22 22 22 12 12 12 11)
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-20 09:52:34 | 显示全部楼层
楼上的算法才厉害啊,,我一直想不到还能这样用MAX。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-20 22:43:03 | 显示全部楼层
[php](defun tt(lst / i lst2)
  (setq i -1)
  (while (setq i(1+ i)
               a(vl-remove 'nil (mapcar '(lambda(x)(nth i x))lst)))
    (setq lst2(cons (apply 'max a) lst2))
  )lst2
) [/php]
;|
(tt lspnb) ->(11 12 12 12 22 22 22 20 20 20 17 18 24)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-21 08:00:21 | 显示全部楼层
谢谢您 雨箭风刀
想不到还可以这样编写
又学到另一种方法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-21 08:11:16 | 显示全部楼层
补充: 7 楼 最末 lst2 改为 (reverse lst2)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-5-22 08:11:02 | 显示全部楼层
还是3楼的最简洁:
  (mapcar '(lambda (x) (apply 'max x)) lst)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 11:52 , Processed in 0.220892 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表