找零钱
约 8 分钟
经典贪心:用最少的硬币凑出指定金额,每次都先用面值最大且不超过剩余金额的硬币。
比如有 元和 元,要凑 元:先给一张 (剩 ),再给三张 ,一共 枚。凑 元则是 枚。
int coins[] = {5, 1}; // 从大到小
int need = 8, cnt = 0;
for (int c : coins) {
cnt += need / c; // 这种面值能用几枚
need %= c; // 剩下多少
}
cout << cnt; // 最少硬币数
用 need / c 一次算出该面值用几枚,比一枚枚减更快,复杂度只和面值种类有关。
重要提醒:这个贪心不是对所有面值都成立的! 只有当硬币面值满足特定条件(如我国 体系)时,“先拿大的”才一定最优。遇到像 这种面值,贪心就会给出错误答案——这个坑我们后面专门再看。
小纸条
用 5 元和 1 元凑 7 元,最少几枚?
登录 后可看答案