硬币找钱问题

发布时间 2023-12-10 17:57:53作者: Kirei7

硬币找钱

如题:

思路:

从最大币值入手

include <stdio.h>

int main() {
int a[6] = {5, 10, 20, 50, 100, 200}; // 币值,以分为单位
int b[6]; // 存放对应硬币的个数
int n;
scanf("%d", &n); // 输入n组测试数据

while (n--) {
    int j;

    // 读取每种硬币的个数
    for (j = 0; j < 6; j++) {
        scanf("%d", &b[j]);
    }

    double money;
    scanf("%lf", &money);
    money = money * 100; // 将金额转换为分
    int num = 0;

    // 从最大币值开始判断
    for (j = 5; j >= 0; j--) {
        /*断是否可以使用当前面值的硬币来支付。
        如果满足这个条件,就执行相应的支付操作,将硬币的数量减少,并更新剩余金额;
        否则,跳过当前面值,尝试使用更小面值的硬币。
      */
        if (money >= a[j] && b[j] > 0) {
            money = money - a[j];
            b[j]--;
            j++; // 回去找最大币值
            num++;
        }
    }

    // 如果剩余金额小于最小单位5分,则输出硬币个数,否则输出"impossible"
    if (money <= a[0]) {
        printf("%d", num);
    } else {
        printf("impossible");
    }

    // 如果不是最后一组数据,输出换行
    if (n > 0) {
        printf("\n");
    }
}

return 0;
}