1003: 最少钱币数 (2013年中南大学研究生复试机试 )
1003: 最少钱币数
时间限制: 1 Sec 内存限制: 128 MB提交: 225 解决: 109
[提交] [状态] [讨论版] [命题人:外部导入]
题目描述
作为A公司的职员,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了。但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡最近就在考虑一个问题:如果每个员工的工资额都知道,最少需要准备多少张人民币,才能在给每位职员发工资的时候都不用老师找零呢?这里假设员工的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
输入
输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<=100),表示老师的人数,然后是n个老师的工资(工资<5000)。
输出
每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。
样例输入
3
1 2 3
2
1 2
样例输出
4 2
1 #include<iostream>
2
3 using namespace std;
4 int teacher[101];
5 int main(){
6 int n;//人民币一共有100元、50元、10元、5元、2元和1元六种。
7 while(cin>>n){
8 int total=0;
9 for(int i=0;i<n;i++){
10 cin>>teacher[i];
11 }
12 for(int i=0;i<n;i++){
13 int k=teacher[i];
14 int l1,l2,l3,l4,l5,l6;
15 l1=k/100;//贪心算法的精髓之处,每次都尽可能用面额大的钱币付款
16 l2=(k-l1*100)/50;
17 l3=(k-l1*100-l2*50)/10;
18 l4=(k-l1*100-l2*50-l3*10)/5;
19 l5=(k-l1*100-l2*50-l3*10-l4*5)/2;
20 l6=k-l1*100-l2*50-l3*10-l4*5-l5*2;
21 total=total+l1+l2+l3+l4+l5+l6;
22 }
23 cout<<total<<endl;
24 }
25 return 0;
26 }