编辑代码

#include <iostream>
#include <vector>
using namespace std;

struct Coin {
    int value; 
    int count; 
    Coin(int v, int c) {
        value = v;
        count = c;
    }
};

vector<Coin> makeChange(vector<Coin>& coins, int amount) {
    vector<Coin> result; 
    int index = 0; 
    while (amount > 0 && index < coins.size()) {
        // 如果当前硬币的面额小于等于需要找零的金额,并且还有剩余的硬币
        if (coins[index].value <= amount && coins[index].count > 0) {
            // 计算最多可以使用多少个当前硬币
            int num = min(amount / coins[index].value, coins[index].count);
            result.push_back(Coin(coins[index].value, num)); // 不使用扩展的初始化列表
            // 更新需要找零的金额
            amount -= num * coins[index].value;

            coins[index].count -= num;
        }
        // 选择下一个面额更小的硬币
        index++;
    }
    return result;
}

void printChange(vector<Coin>& change) {
    cout << "找零48美分:";
    for (int i = 0; i < change.size(); i++) {
        string name;
        switch (change[i].value) {
            case 1: name = "一分"; break;
            case 2: name = "二分"; break;
            case 5: name = "五分"; break;
            case 10: name = "一角"; break;
            case 25: name = "二角五分"; break;
            case 50: name = "五角"; break;
            case 100: name = "一元"; break;
        }
        // 打印硬币的名称和数量
        cout << name << "硬币" << change[i].count << "个";
        // 如果不是最后一个硬币,加上逗号分隔
        if (i != change.size() - 1) {
            cout << ",";
        }
    }
    cout << endl;
}

int main() {
    //按照面额降序排列
    vector<Coin> coins(7, Coin(0, 0)); 
    coins[0] = Coin(100, 10);
    coins[1] = Coin(50, 10);
    coins[2] = Coin(25, 10);
    coins[3] = Coin(10, 10);
    coins[4] = Coin(5, 10);
    coins[5] = Coin(2, 10);
    coins[6] = Coin(1, 10);

    int amount = 48;
    vector<Coin> change = makeChange(coins, amount);
    printChange(change);
    return 0;
}