贪心算法

  1. import java.lang.reflect.Array;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import java.util.Scanner;
  6. public class Main24 {
  7. public static void main(String[] args) {
  8. //人民币额度存入数组
  9. //输入员工数,将每个员工工资存入数组
  10. //工资 减 可发的最高人命币额度,人民币张数加1
  11. Scanner sc=new Scanner(System.in);
  12. int []rmb={100,50,10,5,2,1};
  13. int n;
  14. List<Integer> setint=new ArrayList<Integer>();//人民币张数 数组
  15. while (true) {
  16. n=sc.nextInt();//员工人数
  17. if (n==0) {
  18. break;
  19. }
  20. int count=0;//人民币张数
  21. int []salary=new int[n];//员工工资
  22. for (int i = 0; i < salary.length; i++) {
  23. salary[i]=sc.nextInt();
  24. for (int j = 0; j < rmb.length; j++) {
  25. while (salary[i]>=rmb[j]) {
  26. salary[i]-=rmb[j];
  27. count++;
  28. }
  29. }
  30. }
  31. setint.add(count);
  32. }
  33. for (int item : setint) {
  34. System.out.println(item);
  35. }
  36. }
  37. }

2020年9月28日22:11:04 优化后代码如下:
修改的内容为:判断当前金额的张数时去掉while循环,而改用
总金额/当前最大金额=张数,(张数是去掉零头的,零头用于更小的金额的判断)
张数*当前最大金额 =总金额,

  1. import java.lang.reflect.Array;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import java.util.Scanner;
  6. public class Main {
  7. public static void main(String[] args) {
  8. //人民币额度存入数组
  9. //输入员工数,将每个员工工资存入数组
  10. //工资 减 可发的最高人命币额度,人民币张数加1
  11. Scanner sc=new Scanner(System.in);
  12. int []rmb={100,50,10,5,2,1};
  13. int n;
  14. List<Integer> setint=new ArrayList<Integer>();//人民币张数 数组
  15. while (true) {
  16. n=sc.nextInt();//员工人数
  17. if (n==0) {
  18. break;
  19. }
  20. int count=0;//人民币张数
  21. int []salary=new int[n];//员工工资
  22. for (int i = 0; i < salary.length; i++) {
  23. salary[i]=sc.nextInt();
  24. for (int j = 0; j < rmb.length; j++) {
  25. int t=salary[i]/rmb[j];//工资/当前最大的人民币份额得到需要的张数,张数是舍去零头的。
  26. salary[i]-=t*rmb[j];//t张硬币的金额
  27. count+=t;
  28. }
  29. }
  30. setint.add(count);
  31. }
  32. for (int item : setint) {
  33. System.out.println(item);
  34. }
  35. }
  36. }
点赞(0)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论