題目連結: https://e-tutor.itsa.org.tw/e-Tutor/mod/programming/view.php?id=2308
題目大意: 總共錢,2個種類,4種硬幣,求找給你最少硬幣數。
思路: 貪心,從大的硬幣開始扣,扣完更新剩餘錢,剩餘錢必定等於0,因為幣值有1。接著輸出答案即可。
代碼:
#include <bits/stdc++.h>
using namespace std;
int main()
{
const int coin[] = {1, 5, 10, 50};
int k, n, m, c;
while(scanf("%d,%d,%d", &k, &n, &m) != -1){
c = (n==1) ? 17 : 25;
c *= m;
int rem = k-c;
int bag[4] = {};
for(int i = 3; i >= 0; --i){
if(rem >= coin[i]){
bag[i] += (rem/coin[i]);
rem %= coin[i];
}
}
bool f = 0;
for(int i = 0; i < 4; i++){
if(bag[i] > 0){
if(f) putchar(',');
printf("Coin %d:%d", coin[i], bag[i]);
f = 1;
}
}
puts("");
}
return 0;
}
/*
20,1,1
50,2,1
*/