找零算法

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

一、问题还原
商场买东西的时候,营业员需要找零。现在有面额为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,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值