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 }

猜你喜欢

转载自www.cnblogs.com/tangyimin/p/10547366.html
今日推荐