栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

1020 月饼 (25 分)JAVA

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1020 月饼 (25 分)JAVA

1020 月饼 (25 分)JAVA


理解:
要算出最大收益必须计算出每种月饼的单价,通过比较单价进行由大到小的逆序排序,对排序后的数组计算最大收益。建议不要使用Scanner输入,会超时几个。
代码1:自定义类

import java.io.*;
import java.util.Arrays;
public class Main {
	public static void main(String[] args) throws IOException{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));       
        String[] s1 = br.readLine().split(" ");
        int n=Integer.parseInt(s1[0]);
        double d=Double.parseDouble(s1[1]);
        mooncake[] mk=new mooncake[n];
        String[] s2 = br.readLine().split(" ");
        String[] s3 = br.readLine().split(" ");
        double max=0;
        
        for(int i=0;i=mk[i].inventory) {
				max=max+mk[i].price;
				d=d-mk[i].inventory;
			}
			else if(d{
	public double price;
	public double unitprice;
	public double inventory;
	
	public mooncake(double i,double p,double u) {
		inventory=i;
		price=p;
		unitprice=u;
	}
	
	public int compareTo(mooncake a) {
		return unitprice>a.unitprice ?-1:1;
		//个人理解:另外一个和这个相比,如果比这个小,返回-1,排在这个的后面
	}
}

代码2:用三个double数组记录

 import java.io.*;
 import java.util.Arrays;
 public class Main {
 	public static void main(String[] args) throws IOException{
 		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));       
         String[] s1 = br.readLine().split(" ");
         int n=Integer.parseInt(s1[0]);
         double d=Double.parseDouble(s1[1]);
         String[] s2 = br.readLine().split(" ");
         String[] s3 = br.readLine().split(" ");
 		double[] inventory=new double[n];//库存清单
 		double[] price = new double[n];//价格
 		double[] unitPrice=new double[n];
 		double maxreturn=0;
 		for(int i=0;iunitPrice[j]) {
					tempi=inventory[i];
					inventory[i]=inventory[j];
					inventory[j]=tempi;
					tempp=price[i];
					price[i]=price[j];
					price[j]=tempp;
				}
			}
		}
		Arrays.sort(unitPrice);//升序,由小到大
		for(int i=n-1;i>-1;i--) {
			//System.out.println(inventory[i]+" "+unitPrice[i]*inventory[i]+" "+price[i]);
			if(d>=inventory[i]) {
				maxreturn=maxreturn+price[i];
				d=d-inventory[i];
			}
			else if(d 

学习:

  1. 用 mooncake 类继承 Comparable 接口并重写 compareTo 方法,使用Collections.sort( List a ) 排序
  2. 用 自己定义的类 MyComparator 继承 Comparator接口并重写 compare 方法,创建对象 Comparator cmp = new MyComparator(),使用Arrays.sort( 自定义类的数组, cmp) 排序。
  3. 我对List不太熟悉,虽然用mooncake继承Comparable 接口 ,又直接用Array.sort(数组)排序,结果是可以逆序排序的。

关于MyComparator 继承 Comparator接口并重写 compare 方法,看Arrays.sort()的三种用法
类继承 Comparable 接口并重写 compareTo 方法,看PAT 1020 月饼 (25分)(Java)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328640.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号