C++数组:发工资
【題目描述】
財務處要給公司的n位員工發工資了,請你幫助計算最少要多少張人民幣才能給每位員工發工資而不必找零呢?已知人民幣的面額為100元,50元,10元,5元,2元和1元這6種。
【輸入格式】
第一個值為正整數n,后面接著n個正整數表示n位員工的工資
【輸出格式】
一行一個整數輸出一共要準備的人民幣張數。
【輸入樣例】
3 1 2 3
【輸出樣例】
4
先叨叨兩句:作為一個小菜雞,也是第一次開始創作,后續會一直記錄平時的練習和作業。實際上自己寫代碼的時候,沒有那么多注釋,準備發上來,所以添了很多注釋。因為如果它能有幸幫助到初學者,希望你們都能看懂,看懂了再復制粘貼(我大一就查找到資源直接交作業,然后美美掛科~~)。當然如果能被大佬發現這些文章,希望得到批評指正(希望學會更好的算法)!謝謝看完這段廢話的兄弟姐妹萌~
代碼如下:
#include<iostream> using namespace std;int main() {int n, *p, count=0;// count記錄所需人民幣張數int a[6] = {100,50,10,5,2,1};//面額cin>>n; //員工數 p = new int[n]; //利用指針建立動態數組for(int i=0;i<n;i++){cin>>p[i];}int t = n;//t:保存待計算員工人數 while(t != 0) { //每計算完成一位員工所需數量,t--,直到全體員工計算完成后跳出循環for(int i = 0; i < n; i++) //從第0位員工算到第n-1個 {for(int j = 0; j < 6; j++)//需要最小數量,即需從最大面額開始計算 {if(p[i] >= a[j]) //員工工資大于當前面額 {//k:記錄當前面值的錢需要多少張 int k = p[i] / a[j];count += k; p[i] -= k * a[j]; //為下一面額作準備 }}}t--;}cout<<count<<endl;return 0; }解題思路:
(1) 求最少需要多少張,即面值最大的盡可能用的多,所需的總數才越少(關鍵!)
(2) 先用最大面值的錢來填數,再用次小的面值來填數,比如280的工資,先發2個一百的;剩余80,先發1個50;最后剩余30,發3個10塊;總共6張
(3) 外層循環控制,將每位員工所需數目都計算出來
總結
- 上一篇: Vsearch免费替代收费版的usear
- 下一篇: 剑御九州手游辅助升级工具 提升战力材料介