使用给定列表订购号码的方案可能性

时间:2015-01-08 12:17:05

标签: scheme racket

我正在编写一个方案(drracket)中的程序,该程序应该采用自然数和自然列表,并给出n与列表中的元素一起显示的可能性的数量。

例如(p-o-o 37 (list 1 10 100))为4,因为有以下四种可能性来显示它:1*37; 10*1+1*27; 10*2+1*17; 10*3+7

我的问题是我真的不知道如何开始,因为在我看来我必须编写一个程序来解决未知变量的方程式。

1 个答案:

答案 0 :(得分:1)

;; exercise 2.19                                                                                                                                              
#lang racket/base                                                                                                                                             

(define (cc amount coin-values)                                                                                                                               
  (define no-more? null?)                                                                                                                                     
  (define except-first-denomination cdr)                                                                                                                      
  (define first-denomination car)                                                                                                                             
  (cond                                                                                                                                                       
    ((= amount 0) 1)                                                                                                                                           
    ((or (< amount 0) (no-more? coin-values)) 0)                                                                                                               
    (else                                                                                                                                                      
      (+ (cc amount                                                                                                                                             
             (except-first-denomination coin-values))                                                                                                           
         (cc (- amount                                                                                                                                          
                (first-denomination coin-values))                                                                                                               
             coin-values)))))                                                                                                                                   

racket@ex-2.19.rkt> (cc 37 '(1 10 100))                                                                                                                       
4