给我往死里贪——HRBUST - 1167-每种面值的货币要多少
生活随笔
收集整理的這篇文章主要介紹了
给我往死里贪——HRBUST - 1167-每种面值的货币要多少
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem describe
組織終于發工資了,等了好久的工資終于來了。。。
為了讓大家能在領工資的時候能盡量快,組織決定一次發完所有工資,不會出現讓員工找零的情況,也就是說,如果一個員工的工資是1160元,就會給11張100元,1張50元,1張10元,而不會給員工1200元,然后讓員工找40元零錢的情況。
員工的工資都是整數,單位是元,并且市面上流通的RMB面值有100元,50元,20元,10元,5元,1元。
要求最終需要的紙幣張數最少。
Input
有多組測測試數據,每組測試數據占一行。
對于每組測試數據,第一個數n表示組織有多少員工,接下來有n個數,表示每一個員工要發多少工資。
處理到文件結束。
1 <= n <= 100000, 每個員工的工資不超過1000000
Output
每行輸出6個數,表示100元、50元、20元、10元、5元、1元各需要多少張。
答案可能有0。
Sample Input
1 701
3 474 808 212
Sample Output
7 0 0 0 0 1
14 1 1 1 1 9
題意:如何選擇,使發工資的鈔票數最少。
貪心模板題,往死貪就行了,最初想到用for+減法選擇最優解,仔細思考了一下后,發現用除法+取余可以更高效率的解決問題。
需要注意的是,每輸入一次數據,就要做一次貪心,把結果相加, 而不是數據相加后貪心輸出結果。
#include<iostream> using namespace std; int main() {ios::sync_with_stdio(false); int n; while(cin>>n) {int num=0, a_100=0, a_50=0, a_20=0, a_10=0, a_5=0, a_1=0; for(int i = 0; i < n; i++) {cin>>num; a_100+=num/100; num%=100;a_50+=num/50; num%=50;a_20+=num/20; num%=20;a_10+=num/10; num%=10;a_5+=num/5; num%=5;a_1+=num/1; num%=1;}cout<<a_100<<' '<<a_50<<' '<<a_20<<' '<<a_10<<' '<<a_5<<' '<<a_1<<endl;}return 0; }
總結
以上是生活随笔為你收集整理的给我往死里贪——HRBUST - 1167-每种面值的货币要多少的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 给我往死里贪!——24行代码AC_今年暑
- 下一篇: 17行代码AC_51Nod - 2133