编辑代码

#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;
}