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