【问题标题】:Make-change: Beginner Trouble改变:初学者的麻烦
【发布时间】:2011-02-21 17:17:18
【问题描述】:

我正在尝试创建“make-change”,它将返回总和 = 输入的 ls 硬币,并且它需要包含尽可能少的硬币数量。 例如:(修改 99)

=>(四分之一四分之一一角一角一分钱一分钱一分钱一分钱)

【问题讨论】:

  • 如果是作业,请标记为这样。此外,使用四个缩进来格式化您的代码。
  • 那 5 美分硬币 - 镍呢?
  • 一开始我会从cond中的最大值开始。当 x 达到零时,您需要一个条件,只需返回空列表即可。
  • knivil,你太棒了,我终于让它工作了!谢谢你的提示!!

标签: recursion scheme coin-change


【解决方案1】:

make-change 应该遵循以下原则:

  • 如果剩余金额正好等于 1、5、10 或 25,则归还相应的硬币。
  • 否则,cons 是您可以使用的最大硬币到(make-change (- x value)) 的结果中,其中value 是您刚刚使用的硬币数量。

你可以告诉这个程序将终止,因为金额将在第 2 步中变得越来越小,直到最终可以通过第 1 步结束。

【讨论】:

  • 为了清楚起见,我要补充一点,我会将其分解为一个选择硬币的函数和一个实际执行算法的函数。
  • 我同意 Yasir 和 Marcin 的 cmets。
  • -1。使用这种方法,您会得到 (quarter dime penny penny penny penny penny penny penny) 的变化 42,而 (dime dime dime dime penny penny) 会更短。这并没有解决 OP 的问题,即希望尽可能少的硬币。这个问题澄清了stackoverflow.com/q/3947867/298282的事情
  • 当我第一次尝试它时,这对我不起作用,但那是因为我忘记了我的基本情况并且我没有从 cond 的最大价值开始。但现在我明白了,它是工作完美。谢谢:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 2015-03-09
  • 1970-01-01
  • 1970-01-01
  • 2012-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多