当前位置:   article > 正文

w3c 收银系统算法挑战_if (!cid)

if (!cid)

w3c 收银系统算法挑战

下面有写注释的! 找个钱好累呀~

  1. function checkCashRegister(price, cash, cid) {
  2. price = cash - price;
  3. let arr = [0.01, 0.05, 0.10, 0.25, 1, 5, 10, 20, 100];
  4. for (var k = 0; k < cid.length; k++) {
  5. if (!(cid[k][1] - price)) {
  6. return 'Closed';
  7. }
  8. }
  9. let change = [];
  10. let i = cid.length - 1;
  11. while(i >= 0) {
  12. if (!!cid[i][1] && price - arr[i] >= 0) {
  13. let x = Math.min(price / arr[i], cid[i][1] / arr[i]);
  14. x = parseInt(x);
  15. change.push([cid[i][0], Number((arr[i] * x).toFixed(2))]);
  16. price = +(price - arr[i] * x).toFixed(2);
  17. if (price === 0) {
  18. return change;
  19. }
  20. }
  21. if (i === 0) {
  22. return "Insufficient Funds";
  23. }
  24. i--;
  25. }
  26. }
  1. function checkCashRegister(price, cash, cid) {
  2. // 获取要找的钱 = 付款金额 - 购买价格
  3. price = cash - price;
  4. // 把美元面值的大小按照收银机顺序罗列
  5. let arr = [0.01, 0.05, 0.10, 0.25, 1, 5, 10, 20, 100];
  6. // 先判断是不是有正合适的钱,如果有那么直接找给客户就可以了
  7. for (var k = 0; k < cid.length; k++) {
  8. // 你要40我这里正好有220
  9. if (!(cid[k][1] - price)) {
  10. return 'Closed';
  11. }
  12. }
  13. // 如果没有正合适的钱,那就得凑一凑看看找不找的开
  14. // change相当于手,捏着要找给客户各种面额的钱
  15. let change = [];
  16. // 把给的cid循环一遍,写成for循环可能更直观,但是我开始的想法不是这种,是用的while
  17. let i = cid.length - 1;
  18. while(i >= 0) {
  19. // 如果二维数组的当前项的金额不是0,并且差额减去当前面值可以减得开,可以进判断语句(例如要找50 - 20面值 = 2,那么可以进判断语句。如果要找19 - 20面值 < 0,你要19块钱,我这是20块的票子,怎么可以给你,你再去看看10块面值的吧!)
  20. if (!!cid[i][1] && price - arr[i] >= 0) {
  21. // 获取一个金额的最小倍数, 如果取最大值,是不需要找这么多钱或者是没这么多钱去找的,所以去最小倍数,看看能给几张此面值的钱
  22. let x = Math.min(price / arr[i], cid[i][1] / arr[i]);
  23. // 如果我要找是50块钱,这个20面值的有5张,我只能找两张给客户,得到需要2.520面值的
  24. // 2.5张不能撕了给你吧,要取个整给你两张对不对,如果是要找40,那就给两张就行了
  25. x = parseInt(x);
  26. // 把钱拿出来放手里
  27. change.push([cid[i][0], Number((arr[i] * x).toFixed(2))]);
  28. // 都给过你两张20块面值的钱了,那么看看还需要找给你多少钱,去下一个面值看看有没有
  29. // 你需要
  30. price = +(price - arr[i] * x).toFixed(2);
  31. // 你需要50块钱,到这个10块面值了,正好给你一张就够了,应找金额成0了,不用继续往下找啦。
  32. if (price === 0) {
  33. // 把手里拿着的钱找给客户,找个钱这么麻烦!!
  34. return change;
  35. }
  36. }
  37. //8起,收银机里1分面值的钱都找完了还是找不开
  38. if (i === 0) {
  39. // 找给你个棒棒糖8 =_=
  40. return "Insufficient Funds";
  41. }
  42. i--;
  43. }
  44. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/770561
推荐阅读
相关标签
  

闽ICP备14008679号