「算法学习」:贪心算法找零问题

找零算法,找零???
在这里插入图片描述

在这里插入图片描述
假设你是一个商店老板,你需要给顾客找零n元钱,你手上有的钱的面值为:100元,50元,20元,5元,1元。请问如何找零使得所需要的钱币数量最少?
例子:你需要找零126元,则所需钱币数量最少的方案为100元1找,20元1张,5元1张,1元1张。

具体思路:假设我们需要找零126元,我们先从面额大的钱比较,我们发现126比100大,除法计算可以找一张100块,然后还有26元,继续按照上面的方法去找其他面额的钱币,发现20比剩下的钱小,那再找一张20的,还剩6块,继续找一张5块的和1块的。这其实就是贪心算法的思想,每次都很贪心的去找最大的匹配那个值,然后再找次大的。

const moneyList = [100, 50, 20, 5, 1];  // 现有的面值
function changeMoney(target, allMoney) {
  const length = moneyList .length;
  const result = [];    // 存储结果的数组,每项表示对应面值的张数
  for(let i = 0; i < length; i++) {
    if(n >= moneyList [i]) {
      // 需要找的钱数比目前面额大就可以找钱,相除得出可以找几张,将张数放入数组中
      result[i] = parseInt(n / moneyList [i]);
      n = n - result[i] * moneyList [i];   // 更新剩下需要找的钱
    } else {
      // 当前面额比所需要找的钱数大则将这个数组位置置为0
      result[i] = 0;
    }
  } 
  return result;
}

const result = changeMoney(126, moneyList );
console.log(result);   // [1, 0, 1, 1, 1]

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值