硬币找钱
如题:
思路:
从最大币值入手
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;
}
标签:硬币,int,找钱,++,问题,--,money,币值
From: https://www.cnblogs.com/kirei7/p/17892987.html