5元硬币2枚,10元硬币1枚,50元硬币2枚,500元硬币1枚。
思路:与之前的硬币问题(尽可能多的使用大面值的硬币)有所区别,之前的题目说的是每种硬币个数不限(当时的思路是将各个面值放入ku[ ], 循环遍历,每次操作就是 :硬币的个数 = 当前的钱 % 面值, 当前钱数 - = 兑换过的硬币数),而这次限制了硬币数量意味着兑换的硬币数要根据该面值的硬币本来的数量进行变化。
#include <iostream> #include <cstdio> #include <algorithm> #include <cmath> #include <string> #include <cstring> using namespace std; int main(){ int ku[6] = {1, 5, 10, 50, 100, 500}; int num[6]; while(cin >> num[0]){ for(int i = 1; i < 6; i++){ cin >> num[i]; } int money; cin >> money; int cnt = 0; for(int i = 5; i >= 0; i--){ int t = min(num[i], money / ku[i]); money -= t * ku[i]; cnt += t; } cout << cnt << endl; } return 0; }
例题二:
区间问题