ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaScript-此硬币找零算法怎么了

2019-10-27 07:44:38  阅读:212  来源: 互联网

标签:coin-change loops greedy javascript algorithm


我正在尝试使用贪婪算法来计算在JavaScript中达到一定数量所需的最小硬币数量

返回结果将是一个数组,其中包含每个级别的硬币数量

我决定创建一个可以解决此问题的函数,但是它不起作用

window.addEventListener('load', function(e) {
  function calculateChange(coins, total) {
    var sum = 0;
    var dispatched = [];
    for (var i = 0; i < coins.length;i++) {
      dispatched[c] = 0;
    }

    while (sum < total) {
      for (var c = 0; c < coins.length; c++) {
        while (total - sum >= coins[c]) {
          total += coins[c];
          dispatched[c]++;
        }
      }
    }
    return dispatched;
  }

  alert(calculateChange([50,25,10,5,1],137));
}, false);

computeChange函数接受两个参数,硬币值数组和金额.

第一步将是初始化一个sum变量,该变量显示已分派的更改量.我还将创建一个数组变量,该变量将保存分配某种硬币的次数.

为此,我将遍历coins数组并将所有值设置为0.如果我不知道其他硬币值的数量,这很重要

接下来,我想到了要检查条件是否达到金额的条件

如果还没有,我将开始一个for循环,迭代所有硬币值.至于贪婪算法,随着索引的增加,硬币价值会降低.这是为了使用尽可能少的硬币

为防止跳下硬币层次结构,此for循环内嵌套有一个while循环.这个while循环将检查是否仍然可以使用最大的硬币.

如果不满足循环条件,则while循环将结束. for循环将通过增加索引继续.我们将移至下一个较低级别的硬币.该过程将重复

我期望的输出是这样

[2,1,1,0,2]

这意味着2个50秒,1个季度,1个角钱和2个便士

在此函数中,这应该表示派遣的值,即返回值.运行上面的代码,我没有得到返回值

我唯一可以得到的解释是我使用了错误的循环.即使检查也看不到

我在这里想念什么.深入了解

解决方法:

显然,变量sum初始化为0且从不更新,因此循环

while (sum < total)

将随着总数量的增加而永远运行,但从未减少.也许您想更新总数而不是总数.我猜您混合了sum(显然是所选硬币已经覆盖的值)和total(这是函数的参数)的语义.

标签:coin-change,loops,greedy,javascript,algorithm
来源: https://codeday.me/bug/20191027/1943084.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有