Exact Change


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

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

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

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

Global Object

代码:

 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 高级算法题 收银机找零钱的更多相关文章

  1. fcc的高级算法题

    核心提示:本部分一个9道题,给定时间50小时.属于fcc前端学习的"高级编程脚本"题,对于初学者来说,确实算是"高级"了.如果只想着闭门造车,50小时确实也不过 ...

  2. 算法题之找出数组里第K大的数

    问题:找出一个数组里面前K个最大数. 解法一(直接解法): 对数组用快速排序,然后直接挑出第k大的数.这种方法的时间复杂度是O(Nlog(N)).N为原数组长度. 这个解法含有很多冗余,因为把整个数组 ...

  3. 前端算法题:找出数组中第k大的数字出现多少次

    题目:给定一个一维数组,如[1,2,4,4,3,5],找出数组中第k大的数字出现多少次. 例如:第2大的数是4,出现2次,最后输出 4,2 function getNum(arr, k){ // 数组 ...

  4. FCC上的初级算法题

    核心提示:FCC的算法题一共16道.跟之前简单到令人发指的基础题目相比,难度是上了一个台阶.主要涉及初步的字符串,数组等运算.仍然属于基础的基础,官方网站给出的建议完成时间为50小时,超出了之前所有非 ...

  5. FCC上的javascript算法题之中级篇

    FCC中的javascript中级算法题解答 中级算法的题目中用到了很多js的知识点,比如迭代,闭包,以及对json数据的使用等等,现在将自己中级算法的解答思路整理出来供大家参考讨论.欢迎大家提出新的 ...

  6. FCC的javascript初级算法题解答

    FCC上的javascript基础算法题 前一阵子做的基础算法题,感觉做完后收获还蛮大的,现在将自己的做法总结出来,供大家参考讨论.基本上做到尽量简短有效,但有些算法还可以继续简化,比如第七题若采用正 ...

  7. Java找零钱算法

    买东西过程中,卖家经常需要找零钱.现用代码实现找零钱的方法,要求优先使用面额大的纸币,假设卖家有足够数量的各种面额的纸币. 下面给出的算法比较简单,也符合人的直觉:把找零不断地减掉小于它的最大面额的纸 ...

  8. Java实现 蓝桥杯 算法训练 找零钱

    试题 算法训练 找零钱 问题描述 有n个人正在饭堂排队买海北鸡饭.每份海北鸡饭要25元.奇怪的是,每个人手里只有一张钞票(每张钞票的面值为25.50.100元),而且饭堂阿姨一开始没有任何零钱.请问饭 ...

  9. 贪心算法-找零钱(C#实现)

    找零钱这个问题很清楚,无非就是始终拿可以取的最大面值来找,最后就使得张数最小了,这个实现是在假设各种面值足够多的情况下. 首先拖出一个界面来,最下面是一个listbox控件 对应的代码:问题比较简单, ...

  10. 【算法笔记】B1037 在霍格沃茨找零钱

    1037 在霍格沃茨找零钱 (20 分) 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特( ...

随机推荐

  1. 把linux云服务器上的文件放到本地电脑windows上-----secureCRT

    1.本地电脑需要安装SecureCRT 2.在secureCRT上登录云端服务器,右键点击云端服务器上方的ip地址,选择"connect SFTP session" 3.在SFTP ...

  2. IDEA通过Spring Initalizr新建SSM (2)

    之前的方式是通过官网初始化demo(URL:https://start.spring.io/)现在记录一下通过IDEA自带的初始化器新建SSM框架 1.打开IDEA,点击新建,出现如下图菜单,点击Sp ...

  3. adobe 色轮

    https://color.adobe.com/zh/create/color-wheel

  4. STM32中HAL库和标准库的区别

    转载自:https://www.lmonkey.com/t/RwykY8bBX STM32标准库与HAL库比较 ST为开发者提供了非常方便的开发库.到目前为止,有标准外设库(STD库).HAL库.LL ...

  5. Flutter开发 备用网站地址

    Flutter开发之环境配置_移动开发_System.o的博客-CSDN博客: https://blog.csdn.net/lyh1299259684/article/details/80505185 ...

  6. 杭电oj 平方和与立方和

    给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和.   Input 输入数据包含多组测试实例,每组测试实例包含一行,由两个整数m和n组成.   Output 对于每组输入数据,输出一 ...

  7. Redis缓存问题排查

    一.缓存穿透 概念:缓存穿透是指查询的数据不存在,redis和mysql(或其他持久存储的数据库)都不能命中.工作中出于容错的考虑,如果从数据库内不能查到数据则不会写入缓存,缓存穿透将导致不存在的数据 ...

  8. kvm介绍(1)

  9. 配置windows server多个用户同时使用一个账户远程服务器

    首先,需要服务器开启远程桌面连接: 右键点击"这台电脑"弹出菜单栏,选择"属性"   弹出系统窗口,点击"远程设置"   弹出系统属性窗口, ...

  10. Java基础学习:2、Java数据类型及逻辑运算符

    1.数据类型: 数据类型范围: byte:-2^7 ~ 2^7-1,即-128 ~ 127.1字节.Byte.末尾加B short:-2^15 ~ 2^15-1,即-32768 ~ 32767.2字节 ...