[音乐播放] ZAMYLA陈:现在让我们来对付贪婪。 说你是一个出纳,和你 需要给你的客户一个 一定量的变化。 好吧,如果你是一个贪婪的收银员, 你会希望将所有 硬币给自己。 所以你给客户的变化 使用尽可能少的硬币越好。 你的任务这对集是落实 贪婪,一个程序, 计算出的最小数量 用于制造任何硬币 鉴于变化量。 在深入编程前 概念和贪婪的C语法, 通过贪婪让我们先说说 程序,看看我们是否 可以识别的算法。 请记住,一个算法 只是一组 说明解决问题。 一个算法的贪婪将只是一个 置的逻辑规则和步骤 我们可以遵循。 他们将永远产生最小 所需的硬币数量。 你需要的第一件事情 知道是多大的变化 是欠给客户。 在这个例子中,假设0.32美元。 有很多方法可以找回0.32美元。 可以使用,例如 32便士。 或者,如果你是在一个贪婪位 选择你的硬币,你可以使用 五枚硬币,而不是32发出 客户3角钱 - 面值港币0.10元 - 两便士 - 面值港币0.01元。 但是,我们能够做的比五分硬币更好? 我们还可以更贪婪? 很可能。 让我们继续通过走 贪婪的程序,看看。 如果你的最终目标是使用了几个硬币 如可能的话,那么这将是最 谨慎地使用最大 可能的硬币。 你宁愿给四分之一 备份 - 面值0.25元 - 超过五五分 - 面值0.05港元。 因此,或许我们对执政规律 贪婪可以总是使用 最大的硬币可能。 出了宿舍,硬币,硬币, 和便士,我们 最大的硬币是季度。 因此,我们将首先尝试使用它们。 回到我们的$ 0.32 我们可以用一个季度给 客户0.32美元? 是。 这将使我们0.07美元离开了。 我们可以用一个季度? 没有,因为25大于7。 我们不希望给客户 比我们欠他们了。 好的。 现在,我们已经用尽了我们的宿舍, 让我们进入到下一个最大 硬币,一角硬币。 我们可以用一毛钱给 客户自己0.07美元回来? 没有,因为10大于7。 那么接下来的下一个最大的硬币访问 我们是镍。 我们可以使用镍? 是。 然后我们就会有0.02美元遗留下来的。 我们不能用镍返回$ 0.02。 因此,我们提出的最后一枚硬币 我们的处置 - 一分钱。 并使用两个便士后,我们就 左零美分,这意味着 我们已经成功地偿还 他们改变欠用户 只用四个硬币 - 四分之一,一是镍, 两便士。 您可以运行人员的解决方案,看是否 我们的执政规律和过程给 我们正确的答案。 对于大多数问题集,你就可以 运行人员的解决方案,看看如何 你自己的程序应该工作。 并具体说明将 在问题设置规范。 一旦我们运行人员的解决方案,它 提示我们太大的变化是如何欠下 注意,它要求 达元。 我们INPUT $ 0.32 0.32。 它告诉我们,四个硬币被拖欠, 我们的答案是一致的。 太棒了。 所以,现在让我们开始寻找 在实施 的贪心算法。 我们知道有两件事情。 一,我们需要提示 用户的变化量。 二,我们将要跟随我们 监管规则要始终使用 最大的硬币可能。 三,我们需要跟踪 有多少硬币,我们使用。 因为最后,我们需要打印 硬币,我们的数量。 首先,提示用户 对变化量。 每当处理用户的输入,使 确保你觉得所有的 输入的要求,并且只 接受输入,以满足那些 要求。 在这种情况下,我们要处理的 在美元的货币价值。 该GetFloat和调用getInt功能确保 输入的是数字。 但是,用户能够输入 负数值。 所以要记得只使用非负 投入,其中包括所有负 数字和为零。 在这种情况下,输入 应该是一个浮动。 换句话说,一个十进制数。 因为这个问题集规范要求 你要问的输入美元。 但在C,浮点值不能 准确地表示。 因为有一个有限数 比特,用以 代表无限的价值。 取号0.1。 如果我请你在写0.1 手到百位小数, 你会写一个1,后面 99零。 我们预计,我们的计算机会 打印同样的事情 如果我们要求它。 因此,让我们看看它做什么。 我将回顾印刷价值观走向 本月底穿行。 现在,看到这里有f%是 占位符浮点。 但我们事先指定了我们想要的 100小数显示出来,然后一个新的 行更好的格式。 该字符串后,我们选择0.1作为 浮动,我们要打印出来。 其结果,一个1,接着 一些零,但随后 一大堆数字。 当然并不如预期。 浮点精确性可以介绍 舍入误差到您的 计算方法,你会 一定要避免。 如果你想看到更多的例子,你 可以从下载imprecision.ce 穿行代码,这是一个简单的 程序,要求浮起并打印 回到了百位小数。 当然,如果你想显示 更多或更少的小数位 你可以改变自己。 正如你将看到,虽然差异 两者虽小,当你 要成倍增加,并增加浮筒,即 差距最终可以积少成多。 回到贪婪。 我们希望避免舍入误差 通过处理整数。 所以,当我们从有效输入 用户,让我们这个转换 美元的价值美分。 精神上,我们这样做乘以 100美元的价值。 但要记住,因为浮点, 不精确性,我们要 确保我们使用正确的值。 乘以100将主要动 小数位两个空格来 右,斩去或截断 什么之后。 如果你玩弄一些 例子,你会看到,你不会 始终得到了正确的号码,如果你 使用截断的这种方法。 例如,12.59打印到100 小数位,即给你 12.5899,等等。 你会得到12.58,如果你截断, 12.59不一样,你需要的。 相反,它是最好的圆 数第一。 幸运的是,C自带的 函数调用回合。 它在数学库。 如果你想知道如何使用圆形, 那么你就可以弹出手动或 手册页的功能。 您可以通过输入man,简称做到这一点 手册,然后在功能您 要抬起头来。 所以下键入man轮入端子 命令行会弹出手册。 这可能是一个有点难以破译, 但最终你会 得到它的窍门。 手册页告诉你什么样的功能 确实,然后一些 它可能的用途。 我将离开你去探索 该手册页轮。 但要知道,你可以用它来圆 从您的转换过程中的价值 美元美分。 回合会给你回一个数字 的数据类型双。 你也可以转换或投 到后来一个int。 大。 到现在为止,我们已经向用户提示 对货币量,并 将它转换成美分。 现在我们可以实现一个算法 总是使用 提供最大的硬币。 请记住,有多个 如何实施贪婪,就像 有多种方法可以解决 每一个计算机科学的问题。 寻找最优雅的方式, 这是乐趣的一部分。 纵观这些P-集合,如果你的程序 并不完全符合我 解释的演练, 没关系。 但只要确保它传递 检查50,满足所有 要求构成了规范, 而您认为您是否 方法具有良好的设计。 换句话说,如何有效的呢? 例如,你输入的重复 行代码,而不是使用一个循环,? 用更好的设计编写代码将 快来体验你的进步 通过该过程。 对于此穿行,我就去了 两种方法可用于 完成贪婪。 第一种方法是使用一种方法 循环和减法。 早些时候,当我们谈到通过 贪婪的过程中,我们不断 检查我们是否可以使用一个季度, 和用于四分之一,直到 剩余价值低于0.25美元。 这意味着良好的 while循环结构。 虽然我们仍然可以使用 一季度,使用一个。 while循环应该执行长 作为剩余值大于 或等于四分之一的百分之价值。 这意味着,你也想 跟踪剩余现金 值,并更新它的每一个 您使用一个硬币的时间。 还记得在最后,你的 输出是用于硬币的数目。 所以另一件事,以保持轨道是 您使用的硬币数量。 你可以跟踪这些使用 良好命名的变量。 和你的循环体内会 要更新这些变量。 一旦回路季度完成,你 可以使用硬币类似的一个, 等等,等等,直到你已经 返回的所有的现金。 我在这里写一些伪代码 帮助您可视化是多么的 过程中,我们讨论了可能转化为 C.当你看到这里,我仍在使用 英语单词。 这是不是C呢。 但我已经开始缩进的东西。 我已经把里面的条件 我的括号内。 它开始看起来有点 有点像编程代码。 伪代码是一个伟大的方式 让自己开始。 前可视化你的代码 你查查语法。 因为经常大约是最难的部分 问题真的理解什么 正是您需要做的。 一旦你把它写下来,那么它是一个 更容易查找功能 而具体到你的语法 伪代码行 请记住,这可能不是 相同的那种骨架 你的代码是你写的。 总有优化 作出。 特别是在我的伪代码 在这里,看你能不能发现它。 但本质上是进程 和思维方式 仅仅是因为我们的讨论。 第一行告诉我们在取得 一定量的美元。 第二告诉我们 将其转换为美分。 然后,当小区都可以使用,我们 要增加硬币计数和 减少现金金额。 同去的硬币,硬币, 和便士。 最后,我们告诉用户 我们有多少个硬币使用。 大。 使总结的循环方法。 现在让我们来谈谈模块化的方法, 这更像是分工。 我们都熟悉的加,减, 乘,除运算符 提供给我们。 C具有所有4的那些,而且还具有 模运算符,由一个代表 百分号。 模是很整洁。 它可以让你从其余 两数相除。 还记得长除法消息时 你划分,比如说,74三? 首先是十位,你会 知道3进入7 两次,以使6与 剩下之一。 你会写两个在顶部,然后 从七个减去6,结转 14到余 重复这个过程。 三个进入14四次 做12个,剩下2。 和两个不结转了。 所以两个将在留 底部的剩余部分。 而这正是模给你 该号码在底部。 所以,74模3位给你两个。 和10模二,清楚, 会给你为零。 因为没有任何剩余 当你10分由两个。 六模5,以及5 进入6次。 然后它有一个遗留下来的。 因此,6模五是之一。 然后,如果你有七模 九,你会得到7。 因为九是大于7。 因此,它不划分这一切为七个, 剩下的7个作为你的答案。 如果你仔细想想模多一点, 请记住,它给你的 其余后分裂的东西。 想想你可能是 能够使用它的贪婪。 比方说,用户要求400.11美元。 有什么办法找出多少 你需要无需宿舍 算每个人? 一旦你找出多少个宿舍 你可以用它来制作400.11美元多少 改变遗体? 也许是这里的组合 模和除法会进来 方便给你一个清凉,高雅 接近的贪婪问题。 但请记住,理事 规则仍然适用。 始终使用尽可能大的硬币。 一旦你这样做的如何计算 许多硬币使用,最后一步 是打印出的数 你算过硬币。 到目前为止,我们已经使用了printf 功能仅用于字符串。 但是,当你想打印出在,或 这一点是存储任何类型的数据 在一个变量,你必须表明 ,使用一个占位符。 在这里,我只是包含一些小技巧 关于如何打印出的值。 如果你有一个整数,你会 用%d的为你写的字符串 占位符。 收盘报价后 标志,输入一个逗号。 然后放入整数,将 取为%d的地方,当打印出来。 这样显示的数目后 使用硬币,你 完成与贪婪。 请务必检查所有角的情况下, 整理你的风格了一下,你是 所有的设置提交。 在这个问题集的结尾,你会 比较熟悉的CS50 设备,终端,和环 在C结构和变量 你对你的方式。 学习曲线似乎很难。 因此,需要一步一步来。 确保你写出来的伪代码 前跳水太深 进入不熟悉的语法。 做一个待办事项清单,并打破了 分配成更小,更 管理的任务。 浏览所有CS50资源。 除了讲座,rewatch 此穿行。 狠抓节。 退房的短裤。 读你的同学的提问 上讨论,并发布您自己的。 祝您好运与p组。 并感谢收看。 这是贪婪。 [音乐播放]