JS使用贪心算法解决找零问题示例


Posted in Javascript onNovember 27, 2017

本文实例讲述了JS使用贪心算法解决找零问题。分享给大家供大家参考,具体如下:

前面介绍了JS贪心算法解决背包问题,这里再来看看找零问题的解决方法。

在现实生活中,经常遇到找零问题,假设有数目不限的面值为20,10,5,1的硬币。 给出需要找零数,求出找零方案,要求:使用数目最少的硬币。

对于此类问题,贪心算法采取的方式是找钱时,总是选取可供找钱的硬币的最大值。比如,需要找钱数为25时,找钱方式为20+5,而不是10+10+5。

贪心算法还是很常见的算法之一,这是由于它简单易行,构造贪心策略不是很困难。

可惜的是,它需要证明后才能真正运用到题目的算法中。

<script>
 var money= [20,10,5,1];
 /*
  * m[]:存放可供找零的面值,降序排列
  * n:需要找零数
  */
 function greedyMoney(m,n){
  for(var i=0;i<m.length;i++){
    while(n>=m[i] && n>0){
    document.write(m[i]+" ");
    n = n-m[i];
    }
  }
  document.write("<br>");
  }
  greedyMoney(money,73);
  greedyMoney([25,10,1],63);
</script>

结果是:

20 20 20 10 1 1 1
25 25 10 1 1 1

需要说明的是,在一些情况下,找零钱问题使用贪心算法并不能得到整体最优解,其结果可能只是最优解的很好近似。

比如,如果提供找零的面值是11,5,1,找零15。

使用贪心算法找零方式为11+1+1+1+1,需要五枚硬币而最优解为5+5+5,只需要3枚硬币。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js chrome浏览器判断代码
Mar 28 Javascript
jquery tab插件制作实现代码
Jun 22 Javascript
基于jquery的自定义鼠标提示效果 jquery.toolTip
Nov 14 Javascript
js string 转 int 注意的问题小结
Aug 15 Javascript
Extjs4.0 ComboBox如何实现三级联动
May 11 Javascript
微信小程序 动态绑定事件并实现事件修改样式
Apr 13 Javascript
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
使用ngrok+express解决本地环境中微信接口调试问题
Feb 26 Javascript
vue、react等单页面项目部署到服务器的方法及vue和react的区别
Sep 29 Javascript
微信小程序实现留言功能
Oct 31 Javascript
js中Generator函数的深入讲解
Apr 07 Javascript
JavaScript函数式编程(Functional Programming)箭头函数(Arrow functions)用法分析
May 22 Javascript
Vue.js实现分页查询功能
Nov 15 #Javascript
JS实现网页抢购功能(触发,终止脚本)
Nov 27 #Javascript
JS基于贪心算法解决背包问题示例
Nov 27 #Javascript
基于vue.js的分页插件详解
Nov 27 #Javascript
webpack构建换肤功能的思路详解
Nov 27 #Javascript
vue实现商城上货组件简易版
Nov 27 #Javascript
修改UA在PC中访问只能在微信中打开的链接方法
Nov 27 #Javascript
You might like
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
2017/01/11 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
php连接sftp的作用以及实例代码
2019/09/23 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
Array.slice()与Array.splice()的返回值类型
2006/10/09 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
浅谈jQuery 中的事件冒泡和阻止默认行为
2016/05/28 Javascript
jQuery插件开发发送短信倒计时功能代码
2017/05/09 jQuery
SVG动画vivus.js库使用小结(实例代码)
2017/09/14 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
解决jquery的ajax调取后端数据成功却渲染失败的问题
2018/08/08 jQuery
vue首次赋值不触发watch的解决方法
2018/09/11 Javascript
Angular Material Icon使用详解
2018/11/07 Javascript
nvm、nrm、npm 安装和使用详解(小结)
2019/01/17 Javascript
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
[47:39]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 LGD vs OPTIC
2018/03/31 DOTA
[01:45]典藏宝瓶2+祈求者身心——这就是DOTA2TI9总奖金突破3000万美元的秘密
2019/07/21 DOTA
在Python中使用模块的教程
2015/04/27 Python
深入理解Django中内置的用户认证
2017/10/06 Python
解决python读取几千万行的大表内存问题
2018/06/26 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
Python实现的在特定目录下导入模块功能分析
2019/02/11 Python
将string类型的数据类型转换为spark rdd时报错的解决方法
2019/02/18 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
flask项目集成swagger的方法
2020/12/09 Python
使用 css3 实现圆形进度条的示例
2017/07/05 HTML / CSS
拉丁舞学习者的自我评价
2013/10/27 职场文书
回门宴父母答谢词
2014/01/26 职场文书
民主生活会意见
2015/06/05 职场文书