1. 程式人生 > >1003: 最少錢幣數 (2013年中南大學研究生復試機試 )

1003: 最少錢幣數 (2013年中南大學研究生復試機試 )

時間 都是 每次 一行 輸入數據 bsp imp 用例 討論

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 }

1003: 最少錢幣數 (2013年中南大學研究生復試機試 )