首页 > 解决方案 > 使用模运算符确定数组中的下一个值

问题描述

我的任务是必须确定在给定交易的情况下可以将多少货币面额作为零钱返还。

let change = 96.74

let cashRegister = [ 
  [ 20, 60 ],
  [ 10, 20 ],
  [ 5, 55 ],
  [ 1, 90 ],
  [ 0.25, 4.25 ],
  [ 0.1, 3.1 ],
  [ 0.05, 2.05 ],
  [ 0.01, 1.01 ] 
]

收银机由子数组组成,第一个值是面额,第二个值是金额,例如[20, 60]等于价值 60 美元的 20 美元纸币。

最终数组应如下所示:

let checkCashRegister = [
  [20, 60],
  [10, 20],
  [5, 15],
  [1, 1],
  [0.25, 0.5],
  [0.1, 0.2],
  [0.01, 0.04]
]

我了解计算逻辑,但不知道如何编码。首先,我需要检查更改是否可以被子数组中的第一个值整除。在此之后,我将使用模运算符计算余数以在下一个子数组中使用。为了得到子数组的第二个值,我将子数组的第一个值除以面额的变化除以子数组的第一个值(向下舍入到最接近的整数):

const validDenoms = cashRegister.filter(subArr => {
  return change / subArr[0]
})

let div = cashRegister[0][0] / Math.floor(change / cashRegister[0][0])

# change % cashRegister[0][1] => Remainder

# Remainder % cashRegister[1][1] => Second Remainder

# secondRemainder % cashRegister[2][1] => and so on until all the change is given

我不确定使用该Array.prototype.reduce()方法是否可行,或者是否有其他方法。

请指教。

标签: javascriptarraysloopsmodulo

解决方案


推荐阅读