编程求助:实现金额按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
相关产品推荐
相关产品推荐

