FCC 高级算法题 收银机找零钱
Exact Change
设计一个收银程序 checkCashRegister()
,其把购买价格(price
)作为第一个参数 , 付款金额 (cash
)作为第二个参数, 和收银机中零钱 (cid
) 作为第三个参数.
cid
是一个二维数组,存着当前可用的找零.
当收银机中的钱不够找零时返回字符串 "Insufficient Funds"
. 如果正好则返回字符串 "Closed"
.
否则, 返回应找回的零钱列表,且由大到小存在二维数组中.
代码:
1 function checkCashRegister(price, cash, cid) {
2 var obj = {};
3 var num = 0;
4 var odd = cash - price;
5 var arr = [];
6 var newArr = [];
7 var a = 0;
8
9 for (var i = 0; i < cid.length; i++) {
10 //把这个二维数组的第一项和第二项分别变为新建对象的属性和属性值
11 var s = cid[i][0];
12 obj[s] = cid[i][1];
13 //累加得出收银机零钱的总和
14 num += cid[i][1];
15 }
16 if (odd === num) {
17 //如果收银机中的钱num和需要找的钱odd相等,返回字符串“Closed”
18 return "Closed";
19 }
20 for (var j = 0; j < Object.keys(obj).length; j++) {
21 //遍历对象属性
22 var name = Object.keys(obj)[8 - j];
23 //新建一个关于美元数额的数组
24 var figure = [100, 20, 10, 5, 1, 0.25, 0.1, 0.05, 0.01];
25
26 fi1();
27
28 if (a > 0) {
29 arr.push([name, figure[j] * a]);
30 a = 0;
31 }
32 }
33 function fi1() {
34 if (odd >= figure[j] && obj[name] >= figure[j]) {
35 //判断odd,如果大于某一面额的钞票且在收音机中有该面值的钞票
36 odd = odd - figure[j];
37 //js的精度问题,2=1.999999,所以要用Math.round()来四舍五入
38 odd = Math.round(odd * 10000) / 10000;
39 obj[name] = obj[name] - figure[j];
40 obj[name] = Math.round(obj[name]);
41 //这个a是用来判断是否有多张统一面值的钞票,这个在上面的if语句中用来给空数组arr添加元素
42 a += 1;
43 fi1();
44 }
45 }
46 if (odd === 0) {
47 //如果可以找零并且有剩余,就返回一个应找回的零钱列表
48 return arr;
49 } else if (odd > 0) {
50 //如果收音机中的钱不够找零时,返回字符串"Insufficient Funds"
51 return "Insufficient Funds";
52 }
53 }
54
55 checkCashRegister(19.50, 20.00, [
56 ["PENNY", 0.50],
57 ["NICKEL", 0],
58 ["DIME", 0],
59 ["QUARTER", 0],
60 ["ONE", 0],
61 ["FIVE", 0],
62 ["TEN", 0],
63 ["TWENTY", 0],
64 ["ONE HUNDRED", 0]
65 ]);
FCC 高级算法题 收银机找零钱的更多相关文章
- fcc的高级算法题
核心提示:本部分一个9道题,给定时间50小时.属于fcc前端学习的"高级编程脚本"题,对于初学者来说,确实算是"高级"了.如果只想着闭门造车,50小时确实也不过 ...
- 算法题之找出数组里第K大的数
问题:找出一个数组里面前K个最大数. 解法一(直接解法): 对数组用快速排序,然后直接挑出第k大的数.这种方法的时间复杂度是O(Nlog(N)).N为原数组长度. 这个解法含有很多冗余,因为把整个数组 ...
- 前端算法题:找出数组中第k大的数字出现多少次
题目:给定一个一维数组,如[1,2,4,4,3,5],找出数组中第k大的数字出现多少次. 例如:第2大的数是4,出现2次,最后输出 4,2 function getNum(arr, k){ // 数组 ...
- FCC上的初级算法题
核心提示:FCC的算法题一共16道.跟之前简单到令人发指的基础题目相比,难度是上了一个台阶.主要涉及初步的字符串,数组等运算.仍然属于基础的基础,官方网站给出的建议完成时间为50小时,超出了之前所有非 ...
- FCC上的javascript算法题之中级篇
FCC中的javascript中级算法题解答 中级算法的题目中用到了很多js的知识点,比如迭代,闭包,以及对json数据的使用等等,现在将自己中级算法的解答思路整理出来供大家参考讨论.欢迎大家提出新的 ...
- FCC的javascript初级算法题解答
FCC上的javascript基础算法题 前一阵子做的基础算法题,感觉做完后收获还蛮大的,现在将自己的做法总结出来,供大家参考讨论.基本上做到尽量简短有效,但有些算法还可以继续简化,比如第七题若采用正 ...
- Java找零钱算法
买东西过程中,卖家经常需要找零钱.现用代码实现找零钱的方法,要求优先使用面额大的纸币,假设卖家有足够数量的各种面额的纸币. 下面给出的算法比较简单,也符合人的直觉:把找零不断地减掉小于它的最大面额的纸 ...
- Java实现 蓝桥杯 算法训练 找零钱
试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...
- 贪心算法-找零钱(C#实现)
找零钱这个问题很清楚,无非就是始终拿可以取的最大面值来找,最后就使得张数最小了,这个实现是在假设各种面值足够多的情况下. 首先拖出一个界面来,最下面是一个listbox控件 对应的代码:问题比较简单, ...
- 【算法笔记】B1037 在霍格沃茨找零钱
1037 在霍格沃茨找零钱 (20 分) 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特( ...
随机推荐
- 关于iptables的一些知识
关闭firewalld, 启用iptables:systemctl stop firewalld && systemctl disable firewalld # 关闭firewa ...
- nop4.3 用户权限管理
权限管理涉及到5张表: //用户表 select * from Customer //角色表select * from CustomerRole //用户和角色对应关系select * from Cu ...
- jupyter notebook代码无法运行
如果是anaconda的话,直接就带有jupyter而不需要重新安装,你这样子就是路径混乱了.先输入jupyter kernelspec list查看安装的内核和位置,然后进入显示的安装目录,打开ke ...
- 统计 nginx access.log
awk '{print $1}' access22.log | sort | uniq -c | sort -nr -k1
- Cocoapods的简单介绍和使用
1.Cocoapods运行环境和gem命令 1.1 Ruby运行环境和gem命令 Mac自带Ruby环境.如果gem版本太旧,可以使用以下指令升级到最新: sudo gem update --syst ...
- Websocket(websocket自定义协议)
是基于TCP的 tcp特征: 我发数据对端可以接收到,对端发数据我可以收到 先发先收到,后发后收到 使用websocket客户端发给服务器数据,服务器回客户端返回数据流程(自定义websocket协议 ...
- Linux出现Read-only file system错误解决方法
执行命令时遇到如下错误 这个问题是文件系统受损导致得,fstab文件未正确配置 解决方法: df -hT #查看一下分区及挂载信息 fsck -a /dev/sda3 -a :检查文件系统,有异常便自 ...
- css制作仿商城侧边导航
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- antDesignVue表格
<template> <a-table :pagination="ipagination" @change=" ...
- SecPoint Port Scanner v4.0
SecPoint Port Scanner v4.0 Usage: portscanner <IP> or <hostname> [options] 选项: -p <st ...