找零钱

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 元,最少几枚?

登录 后可看答案

找零钱 · 考级冲刺 · op599 课程