Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ATM取款算法_Javascript_Algorithm_Limit - Fatal编程技术网

Javascript ATM取款算法

Javascript ATM取款算法,javascript,algorithm,limit,Javascript,Algorithm,Limit,ATM取款算法是如何工作的 从ATM机取钱的代码应该是这样的: //ATM中名词的计数 设极限={ 1000: 5, 500: 2, 100: 5, 50: 100, 30: 6 } 让getMoney=(金额、限制)=>{ ... }; console.log(getMoney(1000,限制));//{1000: 1} console.log(getMoney(230,限制));//{}我需要{100:2,30:1} console.log(getMoney(200,限制));//{100

ATM取款算法是如何工作的

从ATM机取钱的代码应该是这样的:

//ATM中名词的计数
设极限={
1000: 5,
500: 2,
100: 5,
50: 100,
30: 6
}
让getMoney=(金额、限制)=>{
...
};
console.log(getMoney(1000,限制));//{1000: 1}
console.log(getMoney(230,限制));//{}我需要{100:2,30:1}
console.log(getMoney(200,限制));//{100: 2}
console.log(getMoney(150,限制));//{50:3}我需要{100:1,50:1}

console.log(getMoney(120,limits));//{30:4}
您的算法假设,如果存在一个解决方案,那么该解决方案将使用仍然适合剩余金额的最高可用面额中的大部分。这适用于某些面额,比如普通面额(1000、500、200、100、50、20、10、5、2、1),但不适用于您示例中的面额

这是的一个变体,是一个“难题”,因为您必须尝试大量的组合。一种方法是,至少优先考虑采用大量高值面额的尝试,并且只在那个些并没有带来解决方案的情况下尝试替代方案

您可以这样编码:

let getMoney=(金额、限额)=>{
让重复=(金额,名义)=>{
if(amount==0)返回{};//成功
如果(!nominals.length)返回;//失败
设标称=标称值[0];
让计数=数学最小值(限额[名义]、数学下限(金额/名义));
for(让i=count;i>=0;i--){
让结果=重现(数量-i*标称,标称切片(1));
如果(结果)返回i{[标称]:i,…result}:result;
}
}
返回递归(amount,Object.keys(limits).map(Number).sort((a,b)=>b-a));
};
//ATM中的名词计数
设极限={1000:5500:2100:5,50:100,30:6}
console.log(getMoney(1000,限制));//{1000: 1}
console.log(getMoney(230,限制));//{30: 1, 100: 2}
console.log(getMoney(200,限制));//{100: 2}
console.log(getMoney(150,限制));//{50: 1, 100: 1}

console.log(getMoney(120,limits));//{30:4}
Javascript中的ATM面额程序

在这里,它将找到不同面额的纸币的最小数量,这些纸币与输入的金额相加。从面额最高的纸币到面额最低的纸币


看看这个。这可能有助于其他人

请添加您的尝试。什么不起作用?这是为了上学吗?同时也张贴你到目前为止所做的尝试。我不想浪费时间去猜测dict
限制的含义,请添加一些评论来解释你的想法algorithm@MoreFreeze我添加了一个注释,这是一个快速恢复问题,您的算法在这里不起作用。你的算法有很多问题:1。您不需要执行am-=am/k*k
,如果客户需要取款230,并且您发现您可以提供2件100,您需要计算的剩余部分是30件,而不是230件。2. <代码>贪婪不好这里。很容易做出一些反例。想想看。