sincerit 硬幣找零之最小數量
阿新 • • 發佈:2018-11-30
現存在一堆面值為 1,2,5,10,20,50 面值的硬幣,問找出總值為 N個單位的零錢的所使用的硬幣的數量最少,輸出最小值
#include <iostream>
using namespace std;
int values[100]; //硬幣面值的陣列
int main() {
int money,size;
cout << "輸入要找零的金額: ";
cin >> money;
cout << "輸入要面值的總數和種類: ";
cin >> size;
cout << "輸入面值(空格隔開):";
for (int i = 0; i < size; i++) cin >> values[i];
int coinsUsed[money+5], mincoin;
for(int i = 1; i <= money; i++) {
mincoin = i; // 假設面值i換取最小的數量就是i
for (int j = 0; j < size; j++) {
if(values[j] <= i) { // 如果能夠換取就一直換取
mincoin = min(mincoin,coinsUsed[i - values[j]] + 1);
}
}
coinsUsed[i] = mincoin;
}
cout<<"總共需要面幣張數為"<<coinsUsed[money]<<endl;
return 0;
}