ITPub博客

首页 > Linux操作系统 > Linux操作系统 > lisp 习题 钱币换算问题

lisp 习题 钱币换算问题

原创 Linux操作系统 作者:babyyellow 时间:2012-08-23 14:36:06 0 删除 编辑
定义一个函数,接受一个整数 cents 并返回四个值,将数字用 25- , 10- , 5- , 1- 来显示,使用最少数量的硬币。(译注: 25- 是 25 美分,以此类推)


CL-USER> (defun cents (n)
       (if (not (integerp n))
           nil
           (let ((x25 0)(x10 0)(x5 0 )(x1 0)(lst nil))
         (setf lst (multiple-value-list (floor  n 25)))
         (if (= 0 (second  lst))
             (cons 'x25 (car lst))
             (progn
              (setf x25 (cons 'x25 (car lst)))
              (setf lst (multiple-value-list (floor (second lst) 10)))
              (if (= 0 (second  lst))
              (list x25 (cons 'x10 (car lst)))
              (progn
                (setf x10 (cons 'x10 (car lst)))
                (setf lst (multiple-value-list (floor (second lst) 5)))
                (list x25 x10 (cons 'x5 (first  lst)) (cons 'x1 (second  lst))))))))))

CENTS
CL-USER> (cents 5)
((X25 . 0) (X10 . 0) (X5 . 1) (X1 . 0))
CL-USER> (cents 6)
((X25 . 0) (X10 . 0) (X5 . 1) (X1 . 1))
CL-USER> (cents 11)
((X25 . 0) (X10 . 1) (X5 . 0) (X1 . 1))
CL-USER> (cents 15)
((X25 . 0) (X10 . 1) (X5 . 1) (X1 . 0))
CL-USER> (cents 5)
((X25 . 0) (X10 . 0) (X5 . 1) (X1 . 0))
CL-USER> (cents 25)
(X25 . 1)
CL-USER> (cents 10)
((X25 . 0) (X10 . 1))
CL-USER>



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/133735/viewspace-741715/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
oracle MySQL Postgresql 专职数据库dba。 系统架构师。 mysql 官方认知dba 。 15年专职dba 经验。 潜意识沟通实证者 心理咨询师。 禅修布道者, 禅修指导员。 禅定实证者。

注册时间:2010-12-02

  • 博文量
    367
  • 访问量
    1908852