编辑代码

#include <stdio.h>
#include <stdlib.h>

// 定义硬币的结构体
struct Coin {
    int value;
    int count;
};

// 比较函数用于按照面额降序排序
int compare(const void *a, const void *b) {
    return ((struct Coin *)b)->value - ((struct Coin *)a)->value;
}

// 贪心算法解决找零问题
void makeChange(struct Coin *coins, int num_coins, int amount) {
    // 按照面额降序排序
    qsort(coins, num_coins, sizeof(struct Coin), compare);

    // 找零
    for (int i = 0; i < num_coins; i++) {
        if (amount >= coins[i].value) {
            int num_used = amount / coins[i].value;
            coins[i].count = num_used;
            amount -= num_used * coins[i].value;
        }
    }

    // 输出找零方案
    printf("找零方案:\n");
    for (int i = 0; i < num_coins; i++) {
        if (coins[i].count > 0) {
            printf("%d元硬币:%d枚\n", coins[i].value, coins[i].count);
        }
    }
}

int main() {
    // 示例数据
    struct Coin coins[] = {
        {25, 0},
        {10, 0},
        {5, 0},
        {1, 0}
    };

    int num_coins = sizeof(coins) / sizeof(coins[0]);
    int amount = 63;

    printf("找零问题解决方案:\n");
    makeChange(coins, num_coins, amount);

    return 0;
}