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. 安装最新版cmake

    pip install cmake --upgradewhich cmakeln -s $(which cmake) /usr/local/bin/cmake

  2. Fortran处理无符号整型unsigned integer

    背景: 计算机是以一串二进制数,用约定的表示方式来存储数据的.约定表示方式的不同,造成了可以表示数的范围不同.其中,对于整数类型数据的表示,有unsigned integer(无符号整型)和signe ...

  3. protobuf如何还原proto源文件及描述字符串中左括弧的意义

    语法分析 和通常的有语法的结构一样,proto的编译也经过词法(tokenize)和语法(parse)两个阶段,相关代码分别在tokenizer.cc和parser.cc两个文件中. /// @fil ...

  4. 远程CG动画制作的神器:RayLink远程控制软件

    近几年疫情变幻多端,加上数字经济的快速发展,直接助推各行各业信息化发展.越来越多企业打破传统固定办公室的限制,对工作场所的选择愈加灵活.自由化.诸如居家办公.外地出差办公.会议协同办公等远程办公的应用 ...

  5. 淘淘商城项目技术点-9:使用FTPClient及FtpUtil工具类将图片上传至ngnix图片服务器

    package com.taotao.controller; import com.taotao.common.utils.FtpUtil; import org.apache.commons.net ...

  6. TS 之 reduce

    一.函数介绍 Array.reduce()方法是对数组进行遍历,返回一个计算后的值 使用方法: Array.reduce((acc, cur, idx, src) => { }, initial ...

  7. pytorch MNIST加载已下载的数据集出现问题及解决方法

    import torch import torch.nn as nn from torch.autograd import Variable import torchvision import tor ...

  8. Angualr动态加载组件

    <ng-container *ngComponentOutlet="customComponent"></ng-container>

  9. hashMap 获取里面value最大的值得key

    public static void main(String[] args) { Map<String, Integer> map = new HashMap(); map.put(&qu ...

  10. 模块一:时间模块、random模块、hashlib模块、日志模块

    模块:就是一系列功能的集合体,有以下分类:*解释器内建模块*python标准库(位于python解释器安装目录的lib文件夹下)*第三方模块(通过(pip install 模块名)语法下载到pytho ...