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}
答案 0 :(得分:1)
您的算法假设,如果有解决方案,则该解决方案将采用最大的可用面额中的大多数,仍与剩余金额相称。这适用于某些种类的面额,例如普通面额(1000、500、200、100、50、20、10、5、2、1),但不适用于您的示例中的面额。
这是change making problem的变体,并且是一个“难题”问题,因为您必须潜在地尝试大量的组合。一种方法是至少优先考虑采用许多较高价值面额的尝试,并且仅在不产生解决方案的情况下才尝试替代方法。
您可以这样编码:
{
...
"content_scripts": [
{
...
"css": [
"css/font-awesome.min.css",
...
]
...
}
],
...
"web_accessible_resources": [
...
"fonts/FontAwesome.otf",
"fonts/fontawesome-webfont.eot",
"fonts/fontawesome-webfont.svg",
"fonts/fontawesome-webfont.ttf",
"fonts/fontawesome-webfont.woff",
"fonts/fontawesome-webfont.woff2",
]
}
答案 1 :(得分:0)
Javascript 中的 ATM 面额程序。
在这里,它会找到与输入金额相加的不同面额纸币的最小数量。从最高面额的纸币到最低的纸币。
检查这个https://stackoverflow.com/a/66456375/9248245。这可能对其他人有帮助