• 4110.圣诞老人的礼物


    这道题其实不难 难就难在有一些知识点没学 所以就花了很多时间来思考 怎么存放数据
    一开始我是用了一个二维数组 后面就改成了Arraylist 然后进行排序
    这道题并不是整箱整箱的拿 ,可以拿箱子的一部分 所以先将性价比高的拿出来

    import java.util.*;
    //定义一个礼物类 存放 礼物的value kg and v_k
    class gift {
    	int val;
    	int kg;
    	double v_k ;
    }
    //定义一个方法
    	public void MAX() {
    //double 统计总数量
    		double count = 0;
    		Scanner sc = new Scanner(System.in);
    		int num = sc.nextInt();
    		int theMax = sc.nextInt();
      //定义一个ArrayList 存放对象 因为一开始 我尝试用一个一维数组存放数据 结果发现 v_k得分开存放
    		List<gift> ls = new ArrayList<gift>();
    		int i = 0;
    		while (i < num) {
    			gift g = new gift();
    			g.val = sc.nextInt();
    			g.kg = sc.nextInt();
    			//不能再类里面运算 ,不然会没有数据
    			g.v_k = (double) g.val / g.kg;
    			ls.add(g);
    			i++;
    		}
    //这道题主要的核心我觉得是下面这个 之前没学 ,不知道java内置的ArrayList 排序方法
    		ls.sort(new Comparator<gift>() {
    			@Override
    			public int compare(gift o1, gift o2) {
    				if ((o1.v_k - o2.v_k) <= 1e-6 && (o1.v_k - o2.v_k) > 0)
    					return 0;
    				else if ((o1.v_k - o2.v_k) > 1e-6)
    					return -1;
    				else
    					return 1;
    			}
    //调整1/-1 的值就可以让Arraylist 升序排序还是降序
    		});
    		//for each 遍历 查看是否为从大到小
    //		for(gift e : ls) {
    //			System.out.println(e.v_k);
    //		}
    		for(int temp = 0;temp < ls.size();temp++ ) {
    			gift g = ls.get(temp);
    			if(g.kg <= theMax) {
    				count += g.val;
    			}
    			else if(g.kg > theMax ) {
    				count += theMax * g.v_k; 
    				break;
    			}
    			theMax -= g.kg;
    		}
    		  System.out.printf("%.1f",	count);
    	}
    	public static void main(String[] args) {
    		Main m = new Main();
    		m.MAX();
    	}
    }
    
  • 相关阅读:
    作业七:用户体验设计案例分析
    作业五:需求分析
    作业四:结对编程 词频统计
    作业四:结对编程,词频统计
    作业三:词频统计
    作业2
    Github注册过程
    ArrayList的说明及简单用法
    Java类中成员变量、局部变量、静态变量的区别
    AspNetCore.SignalR的JwtBearer认证
  • 原文地址:https://www.cnblogs.com/cznczai/p/11147928.html
Copyright © 2020-2023  润新知