本文主要是介绍题目 1197: 发工资咯,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
作为程序猿,最盼望的日子就是每月的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);}}
}
这篇关于题目 1197: 发工资咯的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!