这个任务挺有趣的,贴近生活
设计一个收银程序 checkCashRegister()
,其把购买价格(price
)作为第一个参数 , 付款金额 (cash
)作为第二个参数, 和收银机中零钱 (cid
) 作为第三个参数.
cid
是一个二维数组,存着当前可用的找零.
当收银机中的钱不够找零时返回字符串 "Insufficient Funds"
. 如果正好则返回字符串 "Closed"
.
否则, 返回应找回的零钱列表,且由大到小存在二维数组中.
当你遇到困难的时候,记得查看错误提示、阅读文档、搜索、提问。
这是一些对你有帮助的资源:
- Global Object
下面是代码:
function checkCashRegister(price, cash, cid) {
var change = [],same = cid;
var minus = cash-price,sum=0;
//创建money对象
var money = {
"PENNY" :0.01,
"NICKEL" :0.05,
"DIME" :0.10,
"QUARTER" :0.25,
"ONE" :1,
"FIVE" :5,
"TEN" :10,
"TWENTY" :20,
"ONE HUNDRED":100
};
for(var i=0;i<cid.length;i++){
sum += cid[i][1];//求得收银机余额总数
}
if(minus>sum){//如果要找的零钱大于收银机余额
return "Insufficient Funds" ;
}else if(minus==sum){//如果要找的零钱等于收银机余额
return "Closed";
}else{
var arr = Object.entries(money);//获得money对象的键值对数组
var j=arr.length-1;
for(;j>=0;j--){
if(minus>arr[j][1]){
if(minus>cid[j][1]){
var restSum=0;
for(var k=j;k>=0;k--){//计算收银机小钱余额总数
restSum += cid[j][1];
}
if(restSum<minus){//如果收银机小钱余额总数小于要找的零钱
return "Insufficient Funds";
}else{
change.push(cid[j]);
minus = minus- cid[j][1];
}
}else if(minus == cid[j][1]){
change.push(cid[j]);
return change;
}else{
var chu = Math.floor(minus/arr[j][1]);//向下取整
same[j][1] = arr[j][1]*chu;
change.push(same[j]);
if(minus==same[j][1]){
return change;
}else{
minus = (minus-arr[j][1]*chu).toFixed(2);//保留两位小数
}
}
}
}
}
return change;
}
// 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(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]]);