亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何進行這種更改方法,以便我收到給定金額的賬單

我如何進行這種更改方法,以便我收到給定金額的賬單

楊__羊羊 2023-08-18 10:31:33
我有一項任務,我必須將給定的金額分成賬單。我看不出我做錯了什么,因此請求一些指導。export function change(amount) {    var bills = [1, 2, 5, 10, 20, 50, 100, 200, 500, 1000];    var result = [];    while (amount > 0) {        for (var i = 0; i < bills.length; i++) {            if (amount >= bills[i]) {                amount -= bills[i];                result.push(bills[i]);            }        }    }    return result.length;}
查看完整描述

3 回答

?
手掌心

TA貢獻1942條經驗 獲得超3個贊

您的代碼會先檢查較小的鈔票,然后再檢查較大的鈔票,這顯然是錯誤的:您希望在使用 1 美元鈔票之前擁有盡可能多的 1000 美元鈔票。因此,您可以反轉帳單數組,或者只是對其進行排序以使其反轉:


function change(amount) {

    const bills = [1000, 500, 200, 100, 50, 20, 10, 5, 2, 1];

    // alternatively, to sort it

    // bills.sort((a, b) => b - a);

    const result = [];

    for (const bill of bills) {

        const billCount = Math.floor(amount / bill);

        amount = amount % bill;

        result.push(...new Array(billCount).fill(bill));

    }

    return result;

}


查看完整回答
反對 回復 2023-08-18
?
www說

TA貢獻1775條經驗 獲得超8個贊

您的代碼當前的問題在于它總是與第一個賬單相關,而不是最大的賬單。您需要找到適合給定金額的最大鈔票,以最大限度地減少所需的鈔票數量。


假設您嘗試change(100)使用當前的代碼。它將評估帳單 1,看看它是否合適,然后繼續處理帳單 2,當然它也合適。您當前的程序將重復bills作為輸出,直到達到目標值。


您可以通過bills向后迭代(從最大的開始)來解決此問題,或者您可以簡單地反轉它并保留當前的代碼。


這是一個稍微修改過的版本,修復了錯誤并使用了一些不錯的現代 JS 功能。


const change = function(amount) {


    const bills = [1000, 500, 200, 100, 50, 20, 10, 5, 2, 1];

    const result = [];


    while(amount > 0) {

        for(const bill of bills) {

            if(amount >= bill) {

                amount -= bill;

                result.push(bill);              

            }

        }

    }


    // You don't mention what the expected return value is, so completing this function is up to you

    // (...)

    

};


查看完整回答
反對 回復 2023-08-18
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

我編寫了這段代碼,如果您愿意,您可以重構它,但我認為這樣就可以了


function change (amount) {

  let change = {}

  let bills = [1000, 500, 200, 100, 50, 20, 10, 5, 2, 1]


  if (amount > 0) {

     bills.map(bill => {

       if(amount > 0 && amount >= bill) {

          let value = amount / bill


          if(amount % bill == 0) {

            change[bill.toString()] = value


            amount -= value * bill


            return

          }


          let remainder = amount % bill


          change[bill.toString()] = ((value * bill) - remainder) / bill


          amount = remainder

       }

     });

  }


  return change

}


this.change(111)


查看完整回答
反對 回復 2023-08-18
  • 3 回答
  • 0 關注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號