Exact Change

設計一個收銀程序 checkCashRegister() ,其把購買價格(price)作為第一個參數(shù) , 付款金額 (cash)作為第二個參數(shù), 和收銀機中零錢 (cid) 作為第三個參數(shù).

cid 是一個二維數(shù)組,存著當前可用的找零.

當收銀機中的錢不夠找零時返回字符串 "Insufficient Funds". 如果正好則返回字符串 "Closed".

否則, 返回應找回的零錢列表,且由大到小存在二維數(shù)組中.

var denom = [
  { name: 'ONE HUNDRED', val: 100.00},
  { name: 'TWENTY', val: 20.00},
  { name: 'TEN', val: 10.00},
  { name: 'FIVE', val: 5.00},
  { name: 'ONE', val: 1.00},
 { name: 'QUARTER', val: 0.25},
  { name: 'DIME', val: 0.10},
   { name: 'NICKEL', val: 0.05},
  { name: 'PENNY', val: 0.01}
 ];
 function checkCashRegister(price, cash, cid) {
  //需要找零的錢
  var change = cash - price;
   //把收銀臺的錢求和,同時轉(zhuǎn)變成一個對象
   var register = cid.reduce(function(prev, curr) {
     prev.total += curr[1];
     prev[curr[0]] = curr[1];
     return prev;
   }, {total: 0});
   //簡單的判斷
   if (register.total === change) {
    return 'Closed';
   }
  if (register.total < change) {
     return 'Insufficient Funds';
   }
 
   // 循環(huán)我們之前定義的二維數(shù)組,并求出我們想要返回的面值數(shù)組
  var change_arr = denom.reduce(function(prev, curr) {
     var value = 0;
     //把收銀臺里的面值從大到小的去篩選,并判斷這張面值能否找零
     while (register[curr.name] > 0 && change >= curr.val) {
       change -= curr.val;//滿足條件就扣除這么大的一張面值,好比總共找零60,先給一張50
       register[curr.name] -= curr.val;//同時收銀臺
       value += curr.val;
      //熟悉的朋友知道JavaScript精度的問題,很多時候2其實是1.999999999999,所以這里處理下。
      change = Math.round(change * 100) / 100;
    }
     // 如果value有值,就可以加入要返回的數(shù)組了,否則比較下一階的面值
     if (value > 0) {
        prev.push([ curr.name, value ]);
    }
    return prev;
  }, []); 
   //數(shù)組里沒有值 ,或者需要找零的錢不夠
   if (change_arr.length < 1 || change > 0) {
     return "Insufficient Funds";
  }
   return change_arr;
 }

// Example cash-in-drawer array:
// [["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]]);
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 題目要求:設計一個收銀程序 checkCashRegister() ,其把購買價格(price)作為第一個參數(shù) ,...
    天上月丶閱讀 911評論 0 0
  • 設計一個收銀程序 checkCashRegister() ,其把購買價格(price)作為第一個參數(shù) , 付款金額...
    Awoooo閱讀 204評論 0 0
  • 題目 設計一個收銀程序checkCashRegister(),其把購買價格(price)作為第一個參數(shù) , 付款金...
    delphuy閱讀 875評論 1 1
  • 要求 設計一個收銀程序 checkCashRegister() ,其把購買價格(price)作為第一個參數(shù) , 付...
    Oracle_c113閱讀 271評論 0 0
  • 搜索實現(xiàn)過程 搜索關鍵詞 根據(jù)關鍵詞判斷類目屬性 寶貝標題中是否覆蓋關鍵詞 寶貝之間的競爭排名規(guī)則 展示寶貝 搜索...
    Captain_xu閱讀 330評論 0 0

友情鏈接更多精彩內(nèi)容