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