10分20分换2欧元和1欧元的球拍功能
Racket Function for Changing 2 and 1 Euro with 10 Cents and 20 Cents
谁能给我解释一下 Racket 中的代码,我可以在其中用 10 美分和 20 美分兑换 2 欧元和 1 欧元硬币?
我只能兑换一次 2 欧元硬币和一次 1 欧元硬币。有 20 美分和 10 美分。这是我的代码:
(define (change sum coins)
(if (< sum 200)
0
(if (= sum 200)
1
(if (and (> sum 0)
(<= (length coins) 0))
0
(+ (change (- sum (car coins)) (cdr coins))
(change sum (cdr coins)))))))
(change 200'(20 10))
(change 100'(20 10))
那我要修改什么?感谢您的帮助!
由于 200 目标是硬编码的,您应该从当前总和 0 开始,向上计数,而不是向下计数:
(define (change sum coins)
(if (> sum 200) ; invalid solution
0
(if (= sum 200) ; good solution
1
(if (= (length coins) 0) ; no more coins to use
0
(+ (change (+ sum (car coins)) ; use first coin,
coins) ; _increasing_ the sum
(change sum
(cdr coins))))))) ; don't use first coin any more
现在我们有
> (change 0 '(10))
1
> (change 0 '(20 10))
11
> (change 0 '(7))
0
>
现在您可以抽象出目标值 200,使其成为新函数中的参数,新函数必须将此函数作为其内部定义,以便它可以访问其参数:
(define (coin-change-ways target coins)
(define (change sum coins)
....
....)
(change 0 coins))
有关更多说明,请参阅 。
谁能给我解释一下 Racket 中的代码,我可以在其中用 10 美分和 20 美分兑换 2 欧元和 1 欧元硬币?
我只能兑换一次 2 欧元硬币和一次 1 欧元硬币。有 20 美分和 10 美分。这是我的代码:
(define (change sum coins)
(if (< sum 200)
0
(if (= sum 200)
1
(if (and (> sum 0)
(<= (length coins) 0))
0
(+ (change (- sum (car coins)) (cdr coins))
(change sum (cdr coins)))))))
(change 200'(20 10))
(change 100'(20 10))
那我要修改什么?感谢您的帮助!
由于 200 目标是硬编码的,您应该从当前总和 0 开始,向上计数,而不是向下计数:
(define (change sum coins)
(if (> sum 200) ; invalid solution
0
(if (= sum 200) ; good solution
1
(if (= (length coins) 0) ; no more coins to use
0
(+ (change (+ sum (car coins)) ; use first coin,
coins) ; _increasing_ the sum
(change sum
(cdr coins))))))) ; don't use first coin any more
现在我们有
> (change 0 '(10))
1
> (change 0 '(20 10))
11
> (change 0 '(7))
0
>
现在您可以抽象出目标值 200,使其成为新函数中的参数,新函数必须将此函数作为其内部定义,以便它可以访问其参数:
(define (coin-change-ways target coins)
(define (change sum coins)
....
....)
(change 0 coins))
有关更多说明,请参阅