You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编程求助:实现金额按5、2、1面额拆分的程序开发

解决金额拆分(5/2/1面额)的C++实现方案

嘿,我懂你花了好几小时卡在这个金额拆分程序上的感觉——毕竟类似的逻辑看起来简单,但实际写的时候容易卡壳。不过别担心,咱们用贪心算法就能完美解决这个需求,思路和你之前做的时间转换(秒转年)其实是异曲同工的,都是先处理大单位,再依次处理小单位。

核心思路

咱们的目标是优先用大面额(5>2>1),尽可能减少总张数,步骤很清晰:

  • 先算能用到的最多5面额数量:用目标金额除以5取整
  • 用取余得到剩余金额,再算最多2面额数量:剩余金额除以2取整
  • 最后剩下的金额就是1面额的数量

完整代码实现

结合你已经写的部分,补全后的代码如下:

#include <iostream>
using namespace std;

int main() {
    int money;
    cout << "How much amount of money do you want to split? ";
    cin >> money;

    // 计算各面额数量
    int count5 = money / 5;
    int remaining = money % 5;
    int count2 = remaining / 2;
    remaining = remaining % 2;
    int count1 = remaining;

    // 输出结果,友好展示(跳过数量为0的面额)
    cout << "Split result:" << endl;
    if (count5 > 0) {
        cout << count5 << " 张5面额" << endl;
    }
    if (count2 > 0) {
        cout << count2 << " 张2面额" << endl;
    }
    if (count1 > 0) {
        cout << count1 << " 张1面额" << endl;
    }

    return 0;
}

测试示例

比如输入27,程序会输出:

Split result:
5 张5面额
1 张2面额

再测试几个边界情况:

  • 输入3:输出1张2面额 + 1张1面额
  • 输入1:输出1张1面额
  • 输入10:输出2张5面额

为什么这个逻辑可行?

因为5、2、1的面额组合刚好符合贪心算法的适用条件——每一步选最大面额都能得到全局最优解,和你之前做时间转换(先转年,再月,再日...)的逻辑完全一致,相信你很快就能理解啦!

内容的提问来源于stack exchange,提问作者Marium Sadiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:49:36