题目描述:
作为程序猿,最盼望的日子就是每月的9号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵
但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小李最近就在考虑一个问题:如果每个员工的工资额都知道,最少需要准备多少张人民币,才能在给每位员工发工资的时候都不用员工找零呢?
这里假设程序猿的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。
题目解析:
1.要为所有员工工资准备的钱的张数最少,则发给每个员工的工资里钱的张数要最少;
2.要发给每个员工的工资里钱的张数要最少,则要先发面值最大的钱,再发次大的,再发次次大的;
3.假设某员工薪水为121;
(1):薪水大于100,先发给面值为100的钱,所发张数为:121/100=1张......21元;(还需发21元)
(2):21>大于10,小于50,故发面值为10的钱,所发张数为:21/10=2张......1元;(还需发1元)
(3):1等于1,故发面值为1的钱,所发张数为:1/1=1张......0元;
4.1张+2张+1张=4张 :即该员工所需最少的钱的张数为4张;
6.求出每个员工所需张数再加起来,就是总的所需最少张数;
代码:
package lanqiao;
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] rmb = {100,50,10,5,2,1};
int n;
List<Integer> list = new ArrayList<Integer>(); //人民币张数
while (true)
{
n = sc.nextInt(); //员工人数
if(n == 0)
{
break;
}
int count = 0; //人民币张数
int[] salary = new int[n]; //员工工资
for (int i = 0; i < salary.length; i++) {
salary[i]=sc.nextInt();
for (int j = 0; j < rmb.length; j++) {
while (salary[i]>=rmb[j]) {
salary[i] -= rmb[j];
count++;
}
}
}
list.add(count);
}
for(int x : list)
{
System.out.println(x);
}
}
}