找零算法

简介:

说到算法,可能很多人都会和笔者一样有种晦涩艰深望而却步之感(当然对于那些灰常聪明精于算法的童鞋又另当别论)。在我们向技术高峰攀登的时候,处处都有算法这只传说中的技术老虎的身影,有时它还会突然跳出来挑战一下我们脆弱的小心脏。但是本篇介绍的这个灰常简单,曾经是某对日外包公司的笔试题。笔者甚至不知它能不能被称之为“算法”,请不要皱眉,看看不会妨碍您阅读的心情的。

一、问题还原
商场买东西的时候,营业员需要找零。现在有面额为100元、50元、20元、10元、5元、2元、1元、5角、2角、1角,5分,2分和1分的人民币若干,问,如何找零才能使现金最优发放(也就是说同一找零金额下,找零发放的人民币数量最少)。

二、经典解法
实现如下:

代码

如你所看到的那样,简单的加减法就可以算出来。这实际上就是我们小时候数学课上做过的按照面额的从大到小进行“穷举”。
当然你可能会说加减没有乘除来的快,我们稍作改进:

代码

其实这就是一个简单数学问题的计算机语言(c#)描述而已(当然,您可能已经看出来了,上面的两段小程序写得一点也不OO。有心的读者也可以练练手试试看写一下对找零算法的OO改进版,期待指教),以前我们都是用c语言来描述的。说到这里,笔者不无沉重地又在脑袋里浮现起大学求学阶段某秃顶老头教算法和数据结构的课堂。当年某老人每次开始上课必然坚持来5分钟演讲,兴致勃勃地细说自己是如何依靠聪明才智和刻苦努力成功解决和征服算法的,说的好像天下所有算法都经过他老人家之手一样。同学们纷纷感叹,自恋的人常有,而像老头这么一上课就自恋的人不常有。通常老头的课上不到15分钟,台下就会有大面积异兆出现,比如交头接耳自说自话的,化蝶去见周公的,恩爱有加打情骂俏的......有时在他和蔼的逼视下,讲台下会适当有所收敛。总之一句话,你无法形容老头的课是多么的优秀。学院计系和信息系很多人都灰常庆幸地表示,上他老人家的课,他们得到了充足的休息和睡眠,所以下一学年,他们奋不顾身毅然决然地选择重修老头的课......时光匆匆,历历在目。农历虎年要到了,但是什么时候笔者才敢对算法大声说“I老虎U”呢?

ps:这应该是今年春节前的最后一篇,来年笔者会力争多写博客,多记录自己的开发心得,和大家共同提高。衷心恭祝各位博客园园友们在新的一年里一帆风顺,一往无前,百尺竿头更进一步,一如既往的健康快乐。






本文转自JeffWong博客园博客,原文链接:http://www.cnblogs.com/jeffwongishandsome/archive/2010/02/07/1652257.html,如需转载请自行联系原作者

目录
相关文章
【Java每日一题,动态规划,零钱兑换模板题】硬币组合数量
【Java每日一题,动态规划,零钱兑换模板题】硬币组合数量
|
2月前
|
算法
【算法】贪心算法——柠檬水找零
【算法】贪心算法——柠檬水找零
|
5月前
|
算法 测试技术 C++
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
【状态压缩 容斥原理 组合数学】3116. 单面值组合的第 K 小金额
|
5月前
|
算法
【贪心算法】|860.柠檬水找零
【贪心算法】|860.柠檬水找零
|
5月前
|
存储 算法 程序员
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
【算法训练-动态规划 一】【应用DP问题】零钱兑换、爬楼梯、买卖股票的最佳时机I、打家劫舍
118 0
|
算法 Java Python
深入理解动态规划算法 | 凑硬币
深入理解动态规划算法 | 凑硬币
118 0
|
算法 Java
动态规划算法-凑硬币
动态规划算法-凑硬币
112 0
|
缓存 算法
钞票找零-贪心,动态规划算法
钞票找零-贪心,动态规划算法
114 1
|
算法 C语言
假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。
(2)当n为奇数时,将前后两部分,即1…n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;若两端重量相等,则中间的硬币,即第 (n+1)/2枚硬币是假币。n,放在天平的两端,较轻的一端里有假币,继续在较轻的这部分硬币中用同样的方法找出假币;假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。:因为30位偶数,所以至少要被分一次,然后成为奇数之后,那个假币就是奇数的中位数,所以只需要2次。若输入的硬币数为30,则最少的比较次数为(2),最多的比价次数为(4)。
503 0