FCC----------- Exact Change

设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额

(cash)作为第二个参数, 和收银机中零钱 (cid) 作为第三个参数. cid 是一个二维数组,存着当前可用的找零.

当收银机中的钱不够找零时返回字符串 “Insufficient Funds”. 如果正好则返回字符串 “Closed”.
否则,返回应找回的零钱列表,且由大到小存在二维数组中.


这是一些对你有帮助的资源:

Global Object


checkCashRegister(19.50, 20.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]) 应该返回一个数组.

checkCashRegister(19.50, 20.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]) 应该返回 [["QUARTER", 0.50]].

checkCashRegister(3.26, 100.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]) 应该返回 [["TWENTY", 60.00], ["TEN", 20.00], ["FIVE", 15], ["ONE", 1], ["QUARTER", 0.50], ["DIME", 0.20], ["PENNY", 0.04]].

checkCashRegister(19.50, 20.00, [["PENNY", 0.01], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 0], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]]) 应该返回 "Insufficient Funds".


代码如下:

function checkCashRegister(price, cash, cid) {
    //先把小数转化为整数 按照分为单位转化
    cash = cash * 100;
    price = price * 100;
    //计算应该找的钱
    var change = cash - price,
        changeLeft = change;
    //获取钱柜中总的钱
    var totalCid = getTotalCid(cid);
    var result = [];
    //如果要找的钱多于钱柜中的零钱返回 Insufficient Funds
    if (change > totalCid) {
        return 'Insufficient Funds';
    } else if (change === totalCid) {//如果要找的钱刚好等于钱柜中的钱返回 Closed
        return 'Closed';
    }
    //取出钱的名称 钱的总数和个数,并按照先找大钱的规则找零 ,把找的零钱存入一个数组中
    for (var i = cid.length - 1; i >= 0; i--) {
        var coinName = cid[i][0],
            coinTotal = cid[i][1] * 100,
            coinValue = getValue(coinName),
            coinAmount = coinTotal / coinValue,
            toReturn = 0;

        while (changeLeft >= coinValue && coinAmount > 0) {
            changeLeft -= coinValue;
            coinAmount--;
            toReturn++;
            console.log(changeLeft);
        }


        if (toReturn > 0) {
            result.push([coinName, toReturn * (coinValue / 100)]);
        }
    }


    //判断所有的零钱够不够给  
    if (getTotalCid(result) != change) {
        return 'Insufficient Funds';
    }

    return result;

    //返回零钱数组中的所有零钱
    function getTotalCid(cid) {
        var total = 0;
        for (var i = 0; i < cid.length; i++) {
            total += cid[i][1] * 100;
        }
        return total;
    }

    function getValue(coinOrBill) {
        switch (coinOrBill) {
            case 'PENNY':
                return 1;
            case 'NICKEL':
                return 5;
            case 'DIME':
                return 10;
            case 'QUARTER':
                return 25;
            case 'ONE':
                return 100;
            case 'FIVE':
                return 500;
            case 'TEN':
                return 1000;
            case 'TWENTY':
                return 2000;
            case 'ONE HUNDRED':
                return 10000;
        }
    }
}
// Example cash-in-drawer array:
// [["PENNY", 1.01],        一分钱  101张
// ["NICKEL", 2.05],        五分钱  41张
// ["DIME", 3.10],          一毛钱  31张
// ["QUARTER", 4.25],       2毛5分  17张  
// ["ONE", 90.00],          一块钱  90张
// ["FIVE", 55.00],         五块钱  11张
// ["TEN", 20.00],          十块钱  2张
// ["TWENTY", 60.00],       二十块  3张
// ["ONE HUNDRED", 100.00]] 一百块  1张

checkCashRegister(19.50, 20.00, [["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.10], ["QUARTER", 4.25], ["ONE", 90.00], ["FIVE", 55.00], ["TEN", 20.00], ["TWENTY", 60.00], ["ONE HUNDRED", 100.00]]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值