• FreeCodeCamp---advanced Algorithm Scripting解法


    Exact Change

    设计一个收银程序 checkCashRegister() ,其把购买价格(price)作为第一个参数 , 付款金额 (cash)作为第二个参数, 和收银机中零钱 (cid) 作为第三个参数.

    cid 是一个二维数组,存着当前可用的找零.

    当收银机中的钱不够找零时返回字符串 "Insufficient Funds". 如果正好则返回字符串 "Closed".

    否则, 返回应找回的零钱列表,且由大到小存在二维数组中.

     1 function checkCashRegister(price, cash, cid) {
     2   var arr=[];  //应找回的零钱列表
     3   var cashPrice=[];  //一种钱代表的金额
     4   var cashName=[];  //钱的名字
     5   var cashItemSum=[];  //一种钱的总数
     6   var change=Math.round((cash-price)*100)/100;   //要找回的零钱
     7   var sumCash=0;
     8   cid.forEach(function(item,index,array){
     9     if(item[1]>0){
    10       cashName.push(item[0]);
    11       cashItemSum.push(item[1]);
    12       sumCash += item[1];
    13     }
    14   });
    15   
    16   cashPrice=cashName.map(function(item,index,array){
    17     switch (item){
    18       case "PENNY":
    19         return 0.01;
    20       case "NICKEL":
    21         return 0.05;
    22       case "DIME":
    23         return 0.1;
    24       case "QUARTER":
    25         return 0.25;
    26       case "ONE":
    27         return 1;
    28       case "FIVE":
    29         return 5;
    30       case "TEN":
    31         return 10;
    32       case "TWENTY":
    33         return 20;
    34       case "ONE HUNDRED":
    35         return 100;
    36     }
    37   });
    38   
    39   
    40   sumCash=Math.round(sumCash*100)/100; //对sumCash保留两位小数
    41     
    42   switch (true){
    43     case change>sumCash:
    44       return "Insufficient Funds";
    45     case change === sumCash:
    46       return "Closed";
    47     default:
    48       approachChange(change);
    49       if(arr.length===0){
    50         return "Insufficient Funds";
    51       }else{
    52         return arr;
    53       }
    54   }
    55   
    56   
    57   
    58   function approachChange(change){
    59     var index=0;
    60     if(change>cashPrice[cashPrice.length-1]){
    61       index=cashPrice.length-1;
    62     }
    63     
    64     for(var i=0; i<cashPrice.length-1; i++){
    65       if(cashPrice[i]<=change && change<cashPrice[i+1] && cashItemSum[i]!==0){
    66          index=i;
    67       }
    68     }
    69    
    70     var itemNeedSum=Math.floor(change/cashPrice[index]) * cashPrice[index];
    71     var needMin=Math.min(itemNeedSum,cashItemSum[index]);
    72     var x=Math.round( (change-needMin)*100 )/100;
    73     
    74     if(x>0 && index===0){
    75       return;
    76     }
    77     
    78     arr.push([cashName[index], needMin]);      
    79     
    80     
    81     if(x===0){
    82       return;
    83     }else{
    84       cashPrice=cashPrice.slice(0,index);
    85       approachChange(x);
    86     }  
    87   }
    88   
    89 }
    90 
    91 
    92 checkCashRegister(19.50, 20.00, [["PENNY", 0.01], ["NICKEL", 0], ["DIME", 0], ["QUARTER", 0], ["ONE", 1.00], ["FIVE", 0], ["TEN", 0], ["TWENTY", 0], ["ONE HUNDRED", 0]]);
    View Code
  • 相关阅读:
    jar包和war包的介绍和区别
    Jenkins安装完成后,一直停留在页面Please wait while Jenkins is getting ready to work...的解决方法
    mongdb简介
    loadrunner12的安装教程
    airpods2隐藏的使用技巧(十)点
    银行个人住房贷款LPR办理流程-建行app
    一张图了解地摊经济时代如何摆摊
    每天学五分钟 Liunx 001 | 用户及用户组
    每天学五分钟 Liunx 000 | 计算机与 Liunx
    【转载】资深大牛吐血总结:如何成为一名合格的云架构师?
  • 原文地址:https://www.cnblogs.com/jeacy/p/6641861.html
Copyright © 2020-2023  润新知