1020 月饼 (25 分)JAVA

2023-11-04 06:32
文章标签 java 25 1020 月饼

本文主要是介绍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);}
}

学习:

  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)

这篇关于1020 月饼 (25 分)JAVA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/343910

相关文章

Spring Boot配置和使用两个数据源的实现步骤

《SpringBoot配置和使用两个数据源的实现步骤》本文详解SpringBoot配置双数据源方法,包含配置文件设置、Bean创建、事务管理器配置及@Qualifier注解使用,强调主数据源标记、代... 目录Spring Boot配置和使用两个数据源技术背景实现步骤1. 配置数据源信息2. 创建数据源Be

Spring Boot 3.x 中 WebClient 示例详解析

《SpringBoot3.x中WebClient示例详解析》SpringBoot3.x中WebClient是响应式HTTP客户端,替代RestTemplate,支持异步非阻塞请求,涵盖GET... 目录Spring Boot 3.x 中 WebClient 全面详解及示例1. WebClient 简介2.

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Spring Boot从main方法到内嵌Tomcat的全过程(自动化流程)

《SpringBoot从main方法到内嵌Tomcat的全过程(自动化流程)》SpringBoot启动始于main方法,创建SpringApplication实例,初始化上下文,准备环境,刷新容器并... 目录1. 入口:main方法2. SpringApplication初始化2.1 构造阶段3. 运行阶

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima

Java中的xxl-job调度器线程池工作机制

《Java中的xxl-job调度器线程池工作机制》xxl-job通过快慢线程池分离短时与长时任务,动态降级超时任务至慢池,结合异步触发和资源隔离机制,提升高频调度的性能与稳定性,支撑高并发场景下的可靠... 目录⚙️ 一、调度器线程池的核心设计 二、线程池的工作流程 三、线程池配置参数与优化 四、总结:线程

Spring Boot 与微服务入门实战详细总结

《SpringBoot与微服务入门实战详细总结》本文讲解SpringBoot框架的核心特性如快速构建、自动配置、零XML与微服务架构的定义、演进及优缺点,涵盖开发环境准备和HelloWorld实战... 目录一、Spring Boot 核心概述二、微服务架构详解1. 微服务的定义与演进2. 微服务的优缺点三

我们来说说Java LockSupport 的 park 和 unpark

《我们来说说JavaLockSupport的park和unpark》LockSupport是JDK底层线程阻塞工具,通过park/unpark实现线程阻塞与唤醒,避免死锁,与Object的w... 目录一、LockSupport1.1、LockSupport函数列表1.2、基本使用先 park 再 unpa

SpringBoot集成MyBatis实现SQL拦截器的实战指南

《SpringBoot集成MyBatis实现SQL拦截器的实战指南》这篇文章主要为大家详细介绍了SpringBoot集成MyBatis实现SQL拦截器的相关知识,文中的示例代码讲解详细,有需要的小伙伴... 目录一、为什么需要SQL拦截器?二、MyBATis拦截器基础2.1 核心接口:Interceptor