給定 n 個工資額,面額 {100, 50, 10, 5, 2, 1},每人用最少張數找零,求總張數。多測試用例,n=0 結束。
面額系統為規范貨幣系統:每個面額都是較小面額的整數倍(或組合),貪心策略(優先用大面額)保證最優解。
#include <iostream> using namespace std; int main() { int n, i, num[100], sum, j; int mon[6] = {100, 50, 10, 5, 2, 1}; while (cin >> n && n != 0) { for (i = 0; i < n; i++) cin >> num[i]; sum = 0; for (i = 0; i < n; i++) { for (j = 0; j < 6; j++) { while (num[i] >= mon[j]) { num[i] -= mon[j]; sum++; } } } cout << sum << endl; } return 0; }
for (j = 0; j < 6; j++) {
sum += num[i] / mon[j];
num[i] %= mon[j];
}
cnt[6] 記錄。