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),二十九个纳特( ...
随机推荐
- 斐波那契数python实现迭代循环两种方法
#递归方法 def fibona(n): if n == 0: return 0 elif n==1: return 1 else: return fibona(n - 1) + fibona(n - ...
- Tunnel
Tunnel既不是给https用的,也不是给代理用的,是给https代理用的 之所以以前老觉得Https也有一个tunnel,是因为每次看https请求,fiddler本身就是http代理,本来就会有 ...
- jmeter取样器之KafkaProducerSampler(往kafka插入数据)
项目背景 性能测试场景中有一个业务场景的数据抽取策略是直接使用kafka队列,该场景需要准备的测试数据是kafka队列里的数据,故需要实现插入数据到kafka队列,且需要实现控制每分钟插入多少条数据. ...
- signature
signature可以翻译成基调.特征标记.签名.
- ORACLE 配置ST_GEOMETRY以支持SQL方式操作SDE数据库
这里假设已经在ORACLE里边创建了SDE数据库,在此基础上进行配置: 1.以sde用户登录到oracle,运行一下语句: SELECT * FROM USER_LIBRARIES; CREATE O ...
- SqlServer查看所有表数据条数
select a.name as 表名, max(b.rows) as 记录条数 from sysobjects a ,sysindexes b where a.id=b.id and a.xtype ...
- Python学习笔记组织文件之将美国风格日期的文件改名为欧洲风格的日期
随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...
- WebAPI :Get、Post、Delete、Put
public class RestClientMethod { /// <summary> /// 请求服务器地址 /// </summary> public string B ...
- 2022-04-12内部群每日三题-清辉PMP
1.一个项目的成本绩效指数(CPI)为1.2,且关键路径上的一个可交付成果落后于进度. 如果项目经理将项目回正轨,项目会发生什么情况? A.活动将并行执行 B.范围将被修改 C.成本和风险将会增加 D ...
- eclipse 提示错误The method of type must override a superclass method 的解决办法
java1.5中继承接口是不需要@Override的,而在1.6以上版本中是需要添加@Override注解的,如果项目的编译器是1.5版本的就可能报错The method *** of type mu ...