91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js貪心算法 錢幣找零問題代碼實例

發布時間:2020-08-21 12:24:59 來源:腳本之家 閱讀:180 作者:Jaxu''s home 欄目:web開發

給定一組硬幣的面額,以及要找零的錢數,計算出符合找零錢數的最少硬幣數量。

例如,美國硬幣面額有1、5、10、25這四種面額,如果要找36美分的零錢,則得出的最少硬幣數應該是1個25美分、1個10美分和1個10美分共三個硬幣。這個算法要解決的就是諸如此類的問題。我們來看看如何用動態規劃的方式來解決。

對于每一種面額,我們都分別計算所需要的硬幣數量。具體算法如下:

  1. 如果全部用1美分的硬幣,一共需要36個硬幣
  2. 如果用5美分的硬幣,則需要7個5美分的硬幣 + 1個1美分的硬幣 = 8個硬幣
  3. 如果用10美分的硬幣,則需要3個10美分的硬幣 + 1個5美分的硬幣 + 1個1美分的硬幣 = 5個硬幣
  4. 如果用25美分的硬幣,則需要1個25美分的硬幣 + 1個10美分的硬幣 + 1個1美分的硬幣 = 3個硬幣

示意圖

js貪心算法 錢幣找零問題代碼實例

方案4的硬幣總數最少,因此為最優方案。

具體的代碼實現如下:

function minCoinChange(coins, amount) {
  let result = null;
  if (!amount) return result;

  const makeChange = (index, value, min) => {
    let coin = coins[index];
    let newAmount = Math.floor(value / coin);
    if (newAmount) min[coin] = newAmount;
    if (value % coin !== 0) {
      makeChange(--index, value - coin * newAmount, min);
    }
  };

  const arr = [];
  for (let i = 0; i < coins.length; i++) {
    const cache = {};
    makeChange(i, amount, cache);
    arr.push(cache);
  }
  console.log(arr);
  let newMin = 0;
  arr.forEach(item => {
    let min = 0;
    for (let v in item) min += item[v];
    if (!newMin || min < newMin) {
      newMin = min;
      result = item;
    }
  });
  return result;
}

函數minCoinChange()接收一組硬幣的面額,以及要找零的錢數。我們將上面例子中的值傳入:

const result = minCoinChange2([1, 5, 10, 25], 36);
console.log(result);

得到如下結果:

[
 { '1': 36 },
 { '1': 1, '5': 7 },
 { '1': 1, '5': 1, '10': 3 },
 { '1': 1, '10': 1, '25': 1 }
]
{ '1': 1, '10': 1, '25': 1 }

上面的數組是我們在代碼中打印出來的arr的值,用來展示四種不同面額的硬幣作為找零硬幣時,實際所需要的硬幣種類和數量。最終,我們會計算arr數組中硬幣總數最少的那個方案,作為minCoinChange()函數的輸出。

當然在實際應用中,我們可以把硬幣抽象成任何你需要的數字,這個算法能給出你滿足結果的最小組合。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌鲁木齐市| 靖远县| 九江县| 重庆市| 南康市| 开远市| 宁城县| 广灵县| 靖江市| 巢湖市| 周口市| 石门县| 会昌县| 江西省| 靖江市| 科技| 甘泉县| 平顶山市| 建德市| 富平县| 信丰县| 山东| 靖西县| 嘉善县| 昭苏县| 武义县| 肇庆市| 镇宁| 抚远县| 剑河县| 滦南县| 金门县| 翁源县| 桂平市| 浠水县| 岑巩县| 苍梧县| 安徽省| 海门市| 祁连县| 镇雄县|