zoukankan      html  css  js  c++  java
  • PAT(B) 1020 月饼(Java)

    题目链接:1020 月饼 (25 point(s))
    分析
    • 月饼(库存量,总售价,单价)封装成MoonCake
    • Scanner会超时,用BufferedReader类读取数据
      • 读取的时候用字符串数组保存,见input()方法
    • 将读取的字符串转成int型和double型,见transform()方法
    • 自定义MyComparator类实现Comparator接口,将月饼按照单价降序排序
    • 顺序卖出月饼,直到满足最大需求量或者所有月饼全部卖出,即可得到最大收益
    代码
    /**
     * Score 25
     * Run Time 119ms
     * @author wowpH
     * @version 2.2
     */
    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.Arrays;
    import java.util.Comparator;
    
    public class Main {
    	private int n, d;			// 月饼种类,最大需求量
    	private MoonCake[] moon;	// 月饼
    
    	// n和d,月饼库存量,月饼总售价
    	private String[] nd, stock, price;
    
    	public Main() {
    		input();		// 输入
    		transform();	// 转换
    		MyComparator c = new MyComparator();
    		Arrays.sort(moon, c);	// 排序
    
    		double sum = 0;	// 最大收益
    		int i = 0;
    		while (i < n && d > 0) {
    			if (d < moon[i].stock) {
    				sum += d * moon[i].utilPrice;// 第i种月饼卖出d万吨
    			} else {
    				sum += moon[i].totalPrice;	// 第i种月饼全部卖完
    			}
    			d -= moon[i].stock;	// 市场的剩余需求量
    			i++;
    		}
    
    		System.out.printf("%.2f
    ", sum);	// 输出最大收益
    	}
    
    	// 输入
    	private void input() {
    		InputStreamReader ir = new InputStreamReader(System.in);
    		BufferedReader br = new BufferedReader(ir);
    		try {
    			nd = br.readLine().split(" ");
    			stock = br.readLine().split(" ");
    			price = br.readLine().split(" ");
    			br.close();
    		} catch (IOException e) {
    			System.out.println("输入错误!");
    		}
    	}
    
    	// 将字符串数组类型的数据转换成int型和double型
    	private void transform() {
    		n = Integer.parseInt(nd[0]);
    		d = Integer.parseInt(nd[1]);
    
    		moon = new MoonCake[n];
    		for (int i = 0; i < n; i++) {
    			moon[i] = new MoonCake();
    			moon[i].stock = Double.parseDouble(stock[i]);
    			moon[i].totalPrice = Double.parseDouble(price[i]);
    			moon[i].utilPrice = moon[i].totalPrice / moon[i].stock;
    		}
    	}
    
    	public static void main(String[] args) {
    		new Main();
    	}
    }
    
    final class MoonCake {
    	public double stock;// 库存量
    	public double totalPrice;// 总售价
    	public double utilPrice;// 单价
    }
    
    final class MyComparator implements Comparator<MoonCake> {
    	// 单价降序排序
    	@Override
    	public int compare(MoonCake o1, MoonCake o2) {
    		if (o1.utilPrice < o2.utilPrice) {
    			return 1;
    		} else if (o1.utilPrice > o2.utilPrice) {
    			return -1;
    		}
    		return 0;
    	}
    }
    

    版权声明:

    1. 转载请于首页注明链接形式的PAT(B) 1020 月饼(Java)——wowpH
    2. 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
    3. 如果有疑问欢迎评论留言,尽量解答。

  • 相关阅读:
    乘法逆元
    17-11-01模拟赛
    17/10-17/11做题记录
    17-10-18模拟赛
    17-10-15模拟赛
    13-2.模板复习priority_queue
    bzoj1042[HAOI2008]硬币购物
    bzoj1057[ZJOI2007]棋盘制作
    bzoj1029[JSOI2007]建筑抢修
    bzoj1068[SCOI2007]压缩
  • 原文地址:https://www.cnblogs.com/wowpH/p/11060775.html
Copyright © 2011-2022 走看看