练习题 No.2 硬币问题(贪心法)

来源:互联网 发布:单片机 如何打印二维码 编辑:程序博客网 时间:2024/04/28 06:46

要求

现在有1元、5元、10元、50元、100元、500元的硬币,有C1, C2,C3,C4, C5
现在需要用这些硬币来支付A元,最少需要多少硬币?

输入格式

输入需要输入5种硬币的数量和需要支付的钱

输出格式

输出需要有用了多少硬币以及每种硬币各花了多少

测试输入

10000 100 50 20 10 55000

测试输出

Cost = 85: 1(0) 5(0) 10(50) 50(20) 100(10) 500(5)

解题思路

用贪心法来解决

代码

#include<iostream>using namespace std;int main() {    int rmb[6] = {1, 5, 10, 50, 100, 500};    int rmbNumber[6];    int pay;    for (int i = 0; i < 6; i++) {        cin >> rmbNumber[i];    }    cin >> pay;    int cost = 0;    for (int i = 5; i >= 0; i--) {        int tempCost = min(pay / rmb[i], rmbNumber[i]);        pay -= tempCost * rmb[i];        rmbNumber[i] = tempCost;        cost += tempCost;    }    if (pay > 0) {        cout << "pay = " << pay << " ";    }    cout << "Cost = " << cost << ": ";    for (int i = 0; i < 6; i++) {        cout << rmb[i] << "(" << rmbNumber[i] << ") ";    }    cout << endl;    return 0;}
0 0
原创粉丝点击