lisp 習題 錢幣換算問題

babyyellow發表於2012-08-23
定義一個函式,接受一個整數 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部落格 ” ,連結:http://blog.itpub.net/133735/viewspace-741715/,如需轉載,請註明出處,否則將追究法律責任。

相關文章