换零钱的算法

本文介绍了从美元纸币兑换成1, 5, 10, 25, 50分硬币的问题,作为线性递归的概念示例。算法采用回合制,每次可以选择兑换最大面值的硬币或不兑换,直至剩余金额为0。通过C++实现,讨论了标准递归和使用查找表两种方法,前者时间复杂度为O(n),后者空间复杂度为O(n*m),并探讨如何获取每种组合的详细信息。" 93134606,8643816,虚拟机管理:快照与克隆详解,"['虚拟化技术', '系统管理', 'Linux基础', 'xshell工具', '开源软件']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

换零钱的算法

问题来自SICP,描述如下
现在若干纸币,想要兑换成硬币。硬币面值有1, 5, 10, 25, 50分的硬币。什么,没有25分的,我说的是美元。。。
问有多少种组合方式

这是介绍线性递归这个概念的时候的一个例子,很有意思。
算法嘛,很朴素啊,其主要思想如下

  • 回合制,就是一次递归
  • 每一次都可以选择兑换一个面值最大的,或者不兑换
  • 剩下的将进入下一轮兑换,直到剩下的钱数为0

scheme的代码就不贴上来了,太简单太抽象。我们还是用C++吧

#include<iomanip>
#include<iostream>
using namespace std;

int coin_value[]={
  
  0,1, 5, 10, 25, 50};
int coin_count[]={
  
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值