SICP 换零钱问题

SICP 习题 (1.14)解题总结 SICP 习题 1.14要求计算出过程count-change的增长阶。count-change是书中1.2.2节讲解的用于计算零钱找换方案的过程。要解答习题1.14,首先你需要理解count-change的工作方式,要理解count-change的工作方式,最好是自己去实现一遍count-change,为了避免自己直接抄书中的代码,我决定自己实现一遍用来找换人民币的的“count-change” 阅读详情
书上提到了迭代的算法,想到了完全背包,但是lisp功底太差,实现不了。
(define (count-change amount)
  (cc amount 5))

(define (cc amount kinds-of-coins)
  (cond ((= amount 0) 1)
        ((or (< amount 0) (= kinds-of-coins 0)) 0)
        (else (+ (cc amount
                     (- kinds-of-coins 1))
                 (cc (- amount
                        (first-denomination kinds-of-coins))
                     kinds-of-coins)))))

(define (first-denomination kinds-of-coins)
  (cond ((= kinds-of-coins 1) 1)
        ((= kinds-of-coins 2) 5)
        ((= kinds-of-coins 3) 10)
        ((= kinds-of-coins 4) 25)
        ((= kinds-of-coins 5) 50)))

(count-change 100)
Apache Hop环境搭建实战:从零到一的下载、安装与配置指南 本文详细介绍了Apache Hop环境搭建的全过程,包括下载、安装与配置指南。从选择正确的JDK17版本到设置关键环境变量,再到启动GUI界面和解决常见问题,提供了全面的实战指导。适合数据工程师和ETL开发者快速上手这一强大的数据集成工具。 阅读详情

相关推荐

数字IC后端时钟树综合实战:OCC电路优化与时钟树平衡策略

本文深入探讨了数字IC后端设计中时钟树综合的关键挑战,重点分析了OCC电路时钟树优化的必要性。通过实战案例,详细阐述了如何通过手动干预、时钟分组与分段长树等策略,避免工具自动平衡导致的时序违例和资源浪费,从而有效实现时钟树平衡并提升设计质量。

weixin_29306261的博客 325

SICP-换零钱方法的统计

【问题】 现有半美元、四分之一美元、10美分、5美分和1美分共5种硬币。若将1美元换成零钱,共有多少种不同方式? 【思路】 采用递归过程,假定我们所考虑的可用硬币类型种类排了某种顺序,于是就有下面的关系: 将总数为a的现金换成n中硬币的不同方式的数目等于 将现金数a换成除第一种硬币之外的所有其他硬币的不同方式数目,加上将现金数a-d换成所有种类的硬币的不同方式数目,其中的d是第一

jjjcainiao的专栏 3214

DeepSeek助力学术审稿:高效处理审稿意见的实用提示词指南

本文介绍如何利用DeepSeek AI工具高效处理学术审稿意见,提供实用的提示词指南。从评审意见结构化整理到争议问题回应策略,详细解析AI在加速审稿流程中的应用技巧,帮助研究者大幅提升回复效率和质量。

weixin_28684497的博客 592

SICP学习之旅1.2

代换模型,条件表达式,程序如何演化成计算过程,程序如何在计算过程的求值中表现出自己相应规则,汉诺塔游戏。

qq_63947142的博客 344

金融学习之十三——数据去极值和标准化处理

拿到数据后,数据中可能会存在一些超大或极小的值,这些值与其他的值离得较远,显得格格不入,我们称其为离群点,有时也称为异常点。对于这些值,它的存在会导致影响最终的分析结果,带偏我们的分析。举个简单的例子,10个人的收入分别为2000,2500,2300,2425,2512,2375,2700,2265,2345,10000000,只算前9个,平均值就是2380,但加上最后一个,平均值就是1002144.2,就可能严重带偏最后分析的结果。因此,对于这样的数据,我们需要将其去除或修改。 (一)数据去极值 数据去极

ryo007gnnu的博客 7166

【外挂编程】外挂编程技术揭秘(二)

引言: 经过上一篇文章大家可能对外挂有了一个初步的认识,之前的内容比较简单,应该大家很容易掌握。我写作过程中我发现三个篇幅可能写不完,后续还可能要多加几个篇幅,这篇我们就先以内存挂为主吧。话不多说了,让我们开始吧。 文章中代码github地址: https://github.com/Diamonds-ZhaoYu/hz_example 环境要求: 系统:Windows 语言...

c-rain 4032

换零钱程序c语言,《SICP》换零钱的递归法与迭代法

咳咳..先说一段废话..最近开始看SICP这本书,正看到了换零钱的部分。看到里面那么多简明生动的例子,还有作者的细心讲解,真是唤起了对学习的无限激情。之前也看过王垠的一些文章,提到了诸如Lisp、scheme等语言,不过当时对此是零概念(其实现在对scheme的了解,也止于SICP换零钱这部分章节)。在了解了mit-scheme的一些基本用法后,虽然也觉得用‘括号’这种语法的确很优雅,但当我真的写...

weixin_29169505的博客 1499

深入理解「二进制掩码」:从原理到实践

二进制掩码本质上是一个二进制数,用于通过位操作(如与、或、非、异或等)选择性地操作目标数据的某些位。掩码的每一位(bit)可以看作一个“开关”,决定是否对目标数据的对应位进行操作。二进制掩码是位操作的灵魂,掌握它不仅能提升代码效率,还能解锁许多高级编程技巧。从基础的位提取到复杂的子集枚举,掩码的应用无处不在。希望本文的讲解和代码示例能帮助你快速上手,并在实际项目中灵活运用。如果你有更多关于掩码的疑问或应用场景,欢迎在评论区留言交流!

m0_73494933的博客 2432

SICP中关于兑换零钱的练习

记得在SICP的第一章中,第1.2.2小节讲树形递归的时候,有一个实例是换零钱方式的统计。其中,作者是用的树形递归去求解的。但是,在这个实例的最后,作者又以找到一个效率更高的算法作为了一个非正式的作业,留给了读者作为挑战。起先在看完这节内容的时候,也是绞尽脑汁都想不出还能有什么更好的算法。但是,在看完了大半本书之后,无意中发现了一种方式。其实方法也很笨,就是枚举法,只是当时学到的语法太少了,不知道...

Sphinxsky 408

解锁IPG Photonics SmartWeld系统,开启焊接新时代

SmartWeld 系统是 IPG Photonics 研发的一款先进的激光焊接解决方案,它隶属于自动化激光焊接系统类别 ,但却凭借一系列创新技术和独特设计,在众多同类产品中脱颖而出。该系统基于 IPG 在光纤激光技术领域的深厚积累,融合了先进的光束控制、智能监测和自动化控制等技术,旨在为工业制造提供高效、精准且稳定的焊接工艺。与传统激光焊接系统相比,SmartWeld 系统的独特之处首先体现在其光束控制技术上。它能够精确地调整激光束的能量分布、光斑大小和形状 ,以适应不同材料和焊接工艺的需求。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 1427

【YoloV11改进策略】基于流形约束超连接(mHC)增强YoloV11全局特征提取能力|独家复现|梁文峰署名论文

论文标题:流形约束超连接 (Manifold-Constrained Hyper-Connections, mHC)核心问题:针对超连接 (Hyper-Connections, HC) 扩展残差流宽度时破坏恒等映射、引发训练不稳定性和高内存开销的问题,提出一种约束性框架。目标:恢复残差连接的稳定性与可扩展性,同时保持HC的性能增益。基准模型:基于DeepSeek-V3的MoE架构,进行了3B、9B、27B模型的实验验证。论文图示mHC 是一个通用的HC扩展框架。

m0_47867638的博客 1345

SICP-换零钱方式的统计问题

引入 在《计算机程序的构造和解释》(第2版)P26页,作者用递归的方式为我们提供了一种解决思路: 将总数为a的现金换成n种硬币的不同方式的数目等于 将现金数a换成除第一种硬币之外的所有其他硬币的不同方式数目,加上 将现金数a-d换成所有种类的硬币的不同方式数目,其中的d是第一种硬币的币值 下面是我将书中Scheme的方言换成Common Lisp实现的代码: (defun first-denomination (kinds-of-coins) (cond ((= kinds-of-coins 1) 1

qq_46013251的博客 431

【推荐100个unity插件】帮助你快速开发一款FPS游戏—— FPS Framework

FPS Framework 快速入门指南 FPS Framework 是一个 Unity 开发框架,可加速 FPS 游戏开发。主要功能包括: 第一人称控制器:基于 Character Controller 实现,提供移动、跳跃、下蹲等功能,支持自定义参数调整 渲染管线转换:内置 RP 转换器,支持 URP/HDRP 等渲染管线一键切换 库存系统: 采用双列表管理:物品列表(Items)和可收集物列表(Collectables) 支持自定义库存物品和可收集物类型 提供拾取/丢弃功能实现 快速开始: 通过预制件

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 2567

SICP换零钱问题clojure改写版

scheme版见:http://blog.pengqi.me/2012/06/07/sicp-making-change/

lrq1988的专栏 1044

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SICP:换零钱问题

问题描述 给了50,25,10,5,1美分的硬币,将1美元(100美分)换成零钱,一共有多少方式? 解法描述 采用递归,假定我们所考虑的可用硬币类型种类排了某种顺序:那么将总数为a的现金换成n种硬币的不同方式的数目等于: 将现金数a换成除第一种硬币之外的所有其他硬币的不同方式数目,加上 将现金数a-d换成所有种类的硬币的不同方式数目,其中的d是第一种硬币的币值。 换一种方式来讲,即方式的数目等...

weixin_30914981的博客 242

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

sicp 第一章 递归 迭代

sicp第一章看完了回头做上面的练习题,发现很多东西根本没有弄懂。由于这本书比较难,精力时间有限,打算暑假看完前面两章,完成习题,第三章简略看下,最后两章以后再看。 书上内容都很精细,所以博客里也不会写太多书上的内容,如果感兴趣可以直接看书。博客里主要记录一些解题思路,和...

chenjuan0291的博客 203

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SICP读书笔记 1.2

SICP CONCLUSION 让我们举起杯,祝福那些将他们的思想镶嵌在重重括号之间的Lisp程序员 ! 祝我能够突破层层代码,找到住在里计算机的神灵! 目录 1. 构造过程抽象 2. 构造数据抽象 3. 模块化、对象和状态 4. 元语言抽象 5. 寄存器机器里的计算 Chapter 1 构造过程对象 练习答案 过程与它们所产生的计算 能够看清楚所考虑的动作的后果的能力,对程序设计专...

weixin_30782331的博客 202

关于SICP 1.2.2节中的换零钱方式的统计研究及其迭代实现

不过问题又来了,这种线性递归是很慢的,而且如果值很大的话,容易造成堆栈溢出,有利必有所失,在我的电脑上,算10美元就用了2秒,算20美元,等了好久也没出来-。经过这样的改造之后,效率得到了极大的提升,实测计算100美元也只是10ms+,相比递归计算10美元也要2秒,20美元就算不出来的情况简直不可同日而语)递归尼玛你也太慢了把-0 -迭代对于递归来说,速度更快,缺点就是难写- -,没递归那么简洁明了,不过为了效率,咱还是研究试试。根据此代码也可以很简单的扩展为对任意数量的钱进行任意数量面值货币的兑换。

s_156的博客 223

java零钱换整程序_透析递归应用-换零钱

题目源于《SICP》,这里做一下调整,如下:给了面值为50元、20元、10元、5元、1元的五种零钱若干,思考把面值100元人民币换成零钱一共有多少种方式?SICP给出的递归算法思想如下:将总数为a的现金换成n种不同面值的不同方式的数目等于:将现金a换成除了第一种面值之外的所有其他面值的不同方式数目,加上将现金a-d换成所有种类的面值的不同方式数目,其中d是第一种面值的钱币下面有解释到,递归的思想是...

weixin_39646658的博客 652

SICP学习笔记

http://www.cnblogs.com/zhouyinhui/archive/2009/09/21/1570243.html     SICP学习笔记(1.2.1 ~ 1.2.2)                                            周银辉1, 递归过程 和 递归计算过程在学习SICP前我还没注意过有这样的一个区分,因为我们始终停留在语法表面上的“递...

java-admin 261

递归解决换零钱问题--回顾总结之递归的表达能力

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34124577的博客 288

换零钱问题迭代解法

搬运自 http://blog.sina.com.cn/s/blog_7daf3d040101od8p.html 问题来源 SICP 线性递归和迭代(尾递归) 树形递归(优化尽量先从瓶颈优化,尽量先从算法优化) 指数级 线性 这个结果不能说树形递归是无用的,对于层级数据结构而不是数,就会发现树形递归是很自

u013131522的专栏 1143

透析递归应用-换零钱

题目源于《SICP》,这里做一下调整,如下: 给了面值为50元、20元、10元、5元、1元的五种零钱若干,思考把面值100元人民币换成零钱一共有多少种方式? SICP给出的递归算法思想如下: 将总数为a的现金换成n种不同面值的不同方式的数目等于: 将现金a换成除了第一种面值之外的所有其他面值的不同方式数目,加上 将现金a-d换成所有种类的面值的不同方式数目,其中d是第一种面值...

weixin_30698297的博客 115
上一篇: SICP 练习1.9
下一篇: SICP 习题1.11
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值