找零钱
题目描述:小智去超市买东西,买了不超过一百块的东西。收银员想尽量用少的纸币来找钱。
纸币面额分为50 20 10 5 1 五种。请在知道要找多少钱n给小明的情况下,输出纸币数量最少的方案。 1<=n<=99。
输入:
有多组数据
输出:
对于每种数量不为0的纸币,输出他们的面值*数量,再加起来输出
样例输入:
25
32
样例输出:
20 * 1+5 * 1
20 * 1+10 * 1+1 * 2
源代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int nums[5] = {50, 20, 10, 5, 1};
int main() {
int n;
while(cin>>n) {
int count[51] = {0};
while(n) {
for (int i = 0 ; i < 5; i++) {
if (nums[i] <= n) {
count[nums[i]]++;
n -= nums[i];
break;
}
}
}
vector<char> ans;
for(int i = 0; i < 5; i++) {
if (count[nums[i]]) {
if (nums[i] >= 10) {
ans.push_back(nums[i]/10 + '0');
ans.push_back(nums[i]%10 + '0');
} else {
ans.push_back(nums[i]+'0');
}
ans.push_back('*');
ans.push_back(count[nums[i]]+'0');
ans.push_back('+');
}
}
for (int i = 0; i < ans.size() - 1; i++)
cout<<ans[i];
cout<<endl;
}
return 0;
}
注意: 0~9 int 转换为char, 0 + ‘0’