为了账号安全,请及时绑定邮箱和手机立即绑定

我如何进行这种更改方法,以便我收到给定金额的账单

我如何进行这种更改方法,以便我收到给定金额的账单

杨__羊羊 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 关注
  • 121 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信