【发布时间】:2019-03-02 09:20:14
【问题描述】:
ATM 取款算法是如何工作的?
从 ATM 取款的代码应该是这样的:
// count of nominals in ATM
let limits = {
1000: 5,
500: 2,
100: 5,
50: 100,
30: 6
}
let getMoney = (amount, limits) => {
...
};
console.log(getMoney(1000, limits)); // {1000: 1}
console.log(getMoney(230, limits)); // {} | i need {100: 2, 30: 1}
console.log(getMoney(200, limits)); // {100: 2}
console.log(getMoney(150, limits)); // {50: 3} | i need {100: 1, 50: 1}
console.log(getMoney(120, limits)); // {30: 4}
我试过了,做了这个:
let getMoney = (am, lm) => {
Object.keys(lm).map( k => {
if(lm[k] && am / k >= 1 && am % k === 0)
if(lm[k] > am / k)
r[k] = am / k;
});
};
...但结果不正确:
console.log( getMoney(1000, limits) ); // {1000: 1}
console.log( getMoney(230, limits) ); // {} | i need {100: 2, 30: 1}
console.log( getMoney(200, limits) ); // {100: 2}
console.log( getMoney(150, limits) ); // {50: 3} | i need {100: 1, 50: 1}
console.log( getMoney(120, limits) ); // {30: 4}
我怎样才能让它工作?
【问题讨论】:
-
请添加您的尝试。什么不起作用?是上学的吗?
-
同时发布你到目前为止所尝试的内容。
-
我不想浪费时间去猜测 dict
limits的含义,请添加一些评论来解释你的算法 -
@MoreFreeze 我添加了一条评论
-
Thiat 是一个回弹问题,您的算法在这里不起作用。你的算法有很多问题:1.你不做
am -= am / k * k,如果客户需要提现230,你发现你可以提供2个100,剩下的你需要计算的是30而不是230。2.@987654326 @ 这里。做一些反例很容易。想想吧。
标签: javascript algorithm limit