Java算法---发工资
来源:互联网 发布:java布尔类型的程序 编辑:程序博客网 时间:2024/05/01 15:39
/*对于财务处的工作人员来说,发工资那天是最忙碌的。财务处的NowCoder最近在考虑一个问题:如果每个员工的工资额都知道,最少需要准备多少张人民币,才能在给每位 同事发工资的时候都不用找零呢? 这里假设员工的工资都是正整数,单位元,人民币一共有100元、50元、20元、10元、5元、2元和1元七种。
输入描述:
输入数据包含多个测试实例,每个测试实例的第一行是一个整数n (n≤100),表示人数,然后是n个员工的工资。
输出描述:
对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。
*/
/* * 本题有两种解法: * 1、贪心: * 其实这道题乍眼一看就是用贪心做的,但是贪心有一个缺陷,就是有时候不能取到最优,但是在本题,用贪心就可以,思路很简单,把给的钱从大到小排序,每次都尽量取最大的即可。代码如下:*/public class Main {public static void main(String[] args) { Scanner sc=new Scanner(System.in); int[] mon={100,50,20,10,5,2,1}; while (sc.hasNext()) { int n=sc.nextInt(); int[] input=new int[n]; int sum=0; for(int i=0;i<n;i++){ input[i]=sc.nextInt(); int temp=input[i]; for(int j=0;j<mon.length;j++){ sum+=(temp/mon[j]); temp=temp%mon[j]; if(temp==0){ break; } } } System.out.println(sum); } }}/ * * 2、动态规划: 其实动态规划是我们经常用的一个思想,也是能保证取到最优解的,如果这道题稍有变动的话,贪心就做不了,只能用动态规划,但是动态规划有一个缺点,用空间换时间,动态打表会浪费很多内存,就本题来说,我最开始用动态规划做,自己再本机运行正确,但是提交上去就提示运行错误(一般是数组越界),为什么会出现这样的问题呢,因为测试用例有边界值,举个例子来说:如果给这样的一个测试用例:31 2 2147483647就会出现java.lang.NegativeArraySizeException这个异常,因为我们要开辟2147483647+1个数组,这样导致了开辟数组的长度(当然也超出了int的范围),超出了JVM的设置,就会报错,当然也可以修改JVM的参数,但是我们只能修改自己本机上的,改不了这个测试程序后台的参数,所以,如果自己运行正确,提交运行错误,应该是这个原因,所以,动态规划虽然是个好办法,但是如果测试数据过大,就会很费内存,有时候会报错,所以我们针对不同的题需要有合适的解法,这个题用贪心的话,就不会存在这个数组越界的问题。下面贴上我自己动态规划的代码,虽然下面代码没有通过测试用例,但是这个想法比较好,可以用的其他题,如果有什么问题,希望大家指出问题。 */public class Main { public static void main(String[] args) {Scanner sc=new Scanner(System.in);int[] mon={1,2,5,10,20,50,100};System.out.println(Integer.MAX_VALUE);while (sc.hasNext()) {int n=sc.nextInt();int[] input=new int[n];int max=0;int sum=0;for(int i=0;i<n;i++){input[i]=sc.nextInt();if(input[i]>max)max=input[i];}int [] dp=new int[max+1];dp[0]=0; for(int i=0;i<mon.length;i++){ for(int j=mon[i];j<=max;j++){ dp[j]=dp[j-mon[i]]+1; } } for(int i=0;i<n;i++){ sum+=dp[input[i]]; } System.out.println(sum);}}}
0 0
- Java算法---发工资
- java--发工资
- 发工资
- 发工资
- 发工资
- 发工资
- 杭电 2021 ( 发工资咯:) java
- HDU_ACM-2021 [贪心算法解决]发工资问题
- 升工资与发工资
- hdu 2021 发工资咯:)(java)
- hdoj2021 (java) 发工资咯:)(二维数组&&绝对值)
- hdoj2021 (java) 发工资咯:)(二维数组&&绝对值)
- 发工资喽
- 发工资了!!!!!!
- 这个月工资还没有发
- 发工资了
- 今天发工资
- 发工资了!!
- msm8916 lcd 相关调试点指导
- bootstrap table 插件
- Appium常用方法总结
- Android开发实现距离位置变化
- 再一个mpls的配置
- Java算法---发工资
- [opencv]双目标定(opencv&matlab&halcon)汇总
- CentOS学习9_CentOS安装系统时硬盘分区建议
- mysql命令汇总,持续更新中……
- 租房&考驾照—一个程序员的成长史(5)
- 开启博客旅程
- bootstrap table 插件
- Bootstrap table
- 记不住的笔记