var cnt = 0;
function change(target, coins, usable) {
coin = coins.shift();
if(coins.length==0) {
if(target/coin<=usable) {
cnt += 1;
}
}
else{
for(let i=0; i<=target/coin; i++) {
change(target-coin*i, coins, usable-i);
}
}
}
change(1000, [500, 100, 50, 10], 15);
console.log(cnt);
算法题目链接:https://max.book118.com/html/...。
题目:当下,坐公交或者地铁时大部分人都是刷卡的。不过,时至今日还在用现金支付的人还是比想象的多。本题我们以安置在公交上的零钱兑换机为背景。
这个机器可以用纸币兑换到 10 日元、50 日元、100 日元和 500 日元硬币的组合,且每种硬币的数量都足够多(因为公交接受的最小额度为 10 日元,所以不提供 1 日元和 5 日元的硬币)。
兑换时,允许机器兑换出本次支付时用不到的硬币。此外,因为在乘坐公交时,如果兑换出了大量的零钱会比较不便,所以只允许机器最多兑换出 15 枚硬币。譬如用 1000 日元纸币兑换时,就不能兑换出“100 枚 10 日元硬币”的组合。
求兑换 1000 日元纸币时会出现多少种组合?注意,不计硬币兑出的先后顺序。
拉丁的传说
烙印99
鸿蒙传说
相关分类