FCC(ES6写法) Exact Change

- 设计一个收银程序 `checkCashRegister()`,其把购买价格`(price)`作为第一个参数 , 付款金额 `(cash)`作为第二个参数, 和收银机中零钱 `(cid) `作为第三个参数。
- ` cid` 是一个二维数组,存着当前可用的找零。
- 当收银机中的钱不够找零时返回字符串 `"Insufficient Funds"`。 如果正好则返回字符串 `"Closed"`。
- 否则, 返回应找回的零钱列表,且由大到小存在二维数组中。

思路:1.change表示要找的钱,arr里放剩下的零钱数组,total表示零钱总价值,money表示总共要找的钱的总价值。

function checkCashRegister(price, cash, cid) {
  let change = cash - price;
  let arr = [],j = 0,total = 0 ,money = change;
  const array = [0.01,0.05,0.1,0.25,1,5,10,20,100];
  for(let i = cid.length - 1;i >= 0;i--){
    total += cid[i][1];
    if(change > array[i] && cid[i][1] > 0){
      let c = parseInt(change / array[i]);
      if(c * array[i] > cid[i][1]){
        change -= cid[i][1];
      }else{
        change -= c * array[i];
        cid[i][1] = c * array[i];
      }
      change = change.toFixed(2);
      arr[j] = cid[i];
      j++;
    }   
  }
  if(total === money){
    return "Closed";
  }else if(total < money || change != 0){
    return "Insufficient Funds";
  }
  return arr;
}
console.log(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.5]]

  

如果有不明白的地方请留言,如果有更好更简便更优化的方法请留言,谢谢。

更多内容请访问我的个人博客: Bblog

猜你喜欢

转载自www.cnblogs.com/blackchaos/p/9139018.html