1020 月饼 (25 分)JAVA
2021/10/16 11:10:04
本文主要是介绍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<n;i++) { double x=Double.parseDouble(s2[i]); double y=Double.parseDouble(s3[i]); mk[i]=new mooncake(x,y,y/x); } Arrays.sort(mk); //使用Comparable 接口,才能用Arrays.sort()来给自定义的数据数组逆序排序 for(int i=0;i<n;i++) { //System.out.println(mk[i].inventory); if(d>=mk[i].inventory) { max=max+mk[i].price; d=d-mk[i].inventory; } else if(d<mk[i].inventory) { max=max+mk[i].unitprice*d; break; } else if(d<=0) break; } System.out.printf("%.2f",max); } } class mooncake implements Comparable<mooncake>{ 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;i<n;i++) { inventory[i]=Double.parseDouble(s2[i]); } for(int i=0;i<n;i++) { price[i]=Double.parseDouble(s3[i]); unitPrice[i]=price[i]/inventory[i]; } for(int i=0;i<n-1;i++) { for(int j=i+1;j<n;j++) { double tempi=0; double tempp=0; if(unitPrice[i]>unitPrice[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<inventory[i]) { maxreturn=maxreturn+unitPrice[i]*d;//这里if的逻辑之前有错误,不一定必须创建一个类来做 break; } else if(d<=0) break; } System.out.printf("%.2f",maxreturn); } }
学习:
- 用 mooncake 类继承 Comparable 接口并重写 compareTo 方法,使用Collections.sort( List a ) 排序
- 用 自己定义的类 MyComparator 继承 Comparator接口并重写 compare 方法,创建对象 Comparator cmp = new MyComparator(),使用Arrays.sort( 自定义类的数组, cmp) 排序。
- 我对List不太熟悉,虽然用mooncake继承Comparable 接口 ,又直接用Array.sort(数组)排序,结果是可以逆序排序的。
关于MyComparator 继承 Comparator接口并重写 compare 方法,看Arrays.sort()的三种用法
类继承 Comparable 接口并重写 compareTo 方法,看PAT 1020 月饼 (25分)(Java)
这篇关于1020 月饼 (25 分)JAVA的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-01一个基于注解驱动的可视化的DDD架构-超越COLA的设计
- 2025-01-01PlantUML 时序图 基本例子
- 2025-01-01plantuml 信号时序图
- 2025-01-01聊聊springboot项目如何优雅进行数据校验
- 2024-12-31自由职业者效率提升指南:3个时间管理技巧搞定多个项目
- 2024-12-31适用于咨询行业的项目管理工具:提升跨团队协作和工作效率的最佳选择
- 2024-12-31高效协作的未来:2024年实时文档工具深度解析
- 2024-12-31商务谈判者的利器!哪 6 款办公软件能提升春节合作成功率?
- 2024-12-31小团队如何选择最实用的项目管理工具?高效协作与任务追踪指南
- 2024-12-31数据赋能,智慧养老:看板软件如何重塑养老服务生态