当前位置: 首页 > Web前端 > JavaScript

计算零钱

时间:2023-03-26 21:37:20 JavaScript

请为收银机写一个函数checkCashRegister():它的第一个参数是卖价price,第二个参数是支付的现金金额,第三个参数是收银机中的金额cid。cid是一个包含货币面额的二维数组。函数checkCashRegister()应该返回一个具有状态和更改属性的对象。返回{status:"INSUFFICIENT_FUNDS",change:[]}如果收银机中的金额少于应退回的找零金额,或者无法退回准确金额。如果收银机中的金额恰好等于应该退回的找零金额,则返回{status:"CLOSED",change:[...]},其中change的属性值为收银机中的金额.否则返回{status:"OPEN",change:[...]},其中找零键值是应该退回的找零金额,找零的面额从高到低排序。货币单位单位面值便士0.01美元(PENNY)镍0.05美元(NICKEL)0.1美元(DIME)季度0.25美元(QUARTER)Dollar1(ONE)五美元US$5(五)十美元US$10(TEN)二十美元$20(TWENTY)一百美元$100(ONEHUNDRED)下面抽屉中的示例现金数组:[["PENNY",1.01],["NICKEL",2.05],["DIME",3.1],["QUARTER",4.25],["ONE",90],["FIVE",55],["TEN",20],["TWENTY",60],["ONEHUNDRED",100]]以下是测试用例:checkCashRegister(19.5,20,[[“一分钱”,1.01],[“镍币”,2.05],[“一角钱”,3.1],[“四分之一”,4.25],[“一分钱”,90],[“五”,55],["TEN",20],["TWENTY",60],["ONEHUNDRED",100]])应该返回一个对象。checkCashRegister(19.5,20,[["一分钱",1.01],["镍",2.05],["一角钱",3.1],["四分之一",4.25],["一分钱",90],["五",55],["TEN",20],["TWENTY",60],["ONEHUNDRED",100]])应该返回{status:"OPEN",change:[["QUARTER",0.5]]}。checkCashRegister(3.26,100,[["一分钱",1.01],["镍",2.05],["一角钱",3.1],["四分之一",4.25],["一分钱",90],["五",55],["TEN",20],["TWENTY",60],["ONEHUNDRED",100]])应返回{status:"OPEN",change:[["TWENTY",60],["十",20],["五",15],["一",1],["四分之一",0.5],["一角",0.2],["便士",0.04]]}.checkCashRegister(19.5,20,[["一分钱",0.01],["镍币",0],["一角钱",0],["四分之一",0],["一分钱",0],["FIVE",0],["TEN",0],["TWENTY",0],["ONEHUNDRED",0]])应返回{status:"INSUFFICIENT_FUNDS",change:[]}。checkCashRegister(19.5,20,[[“便士”,0.01],[“镍”,0],[“一角”,0],[“四分之一”,0],[“一分钱”,1],[“五”,0],["TEN",0],["TWENTY",0],["ONEHUNDRED",0]])应返回{status:"INSUFFICIENT_FUNDS",change:[]}。checkCashRegister(19.5,20,[["一分钱",0.5],["镍币",0],["一角钱",0],["四分之一",0],["一分钱",0],["五分钱"",0],["TEN",0],["TWENTY",0],["ONEHUNDRED",0]])应返回{status:"CLOSED",change:[["PENNY",0.5],[“镍”,0],[“一角”,0],[“四分之一”,0],[“一”,0],[“五”,0],[“十”,0],["二十",0],["一百",0]]}。代码实际如下:functioncheckCashRegister(price,cash,cid){letchange=[];letunit={"ONEHUNDRED":100,TWENTY:20,TEN:10,FIVE:5,ONE:1,QUARTER:0.25,DIME:0.1,NICKEL:0.05,PENNY:0.01,}letcidUnitCount=getUnitCount(cid,单元);让remain=cash-price,isSuit=true;for(letkeyinunit){if(unit[key]<=remain){constunitPrice=unit[key];constunitTotalCount=cidUnitCount[key];让curTotalPrice=0,curCount=0;while(curTotalPriceremain){curCount--;curTotalPrice=curCount*unitPrice;}if(curCount!==0){change.push([key,curTotalPrice]);remain=(remain-curTotalPrice).toFixed(2);}if(curCount!==unitTotalCount){isSuit=false;}}}让结果;if(remain==0){if(isSuit){result={status:"CLOSED",change:cid};}else{result={status:"OPEN",change:change};}}else{结果={status:"INSUFFICIENT_FUNDS",change:[]};}returnresult;}functiongetUnitCount(arr,unit){让结果={};arr.forEach(item=>{const[key,value]=item;result[key]=Math.round(value/unit[key]);})返回结果;}checkCashRegister(19.5,20,[["PENNY",1.01],["NICKEL",2.05],["DIME",3.1],["QUARTER",4.25],["ONE",90],["FIVE",55],["TEN",20],["二十",60],["一百",100]]);checkCashRegister(3.26,100,[["一分钱",1.01],["五分钱",2.05],["一角硬币",3.1],["QUARTER",4.25],["ONE",90],["FIVE",55],["TEN",20],["TWENTY",60],["ONEHUNDRED",100]])checkCashRegister(19.5,20,[["一分钱",0.01],["镍币",0],["一角钱",0],["四分之一",0],["一分钱",0],[“五”,0],[“十”,0],[“二十”,0],[“一百”,0]])checkCashRegister(19.5,20,[["一分钱",0.01],["镍币",0],["一角钱",0],["四分之一",0],["一分钱",1],["五分钱"",0],["十",0],["二十",0],["一百",0]])checkCashRegister(19.5,20,[["便士",0.5],["镍",0],["一角",0],["四分之一",0],["一个",0],["五",0],["十",0],["二十",0],[“一百”,0]])