PAT(B) 1020 月饼(Java)
2024-09-01 12:45:42
题目链接: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\n", 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;
}
}
版权声明:
- 转载请于首页注明链接形式的PAT(B) 1020 月饼(Java)——wowpH;
- 代码原创,公开引用不能删除首行注释(作者,版本号,时间等信息);
- 如果有疑问欢迎评论留言,尽量解答。
最新文章
- MyBatis学习(三)
- (转载)Linux如何编译安装源码包软件
- 使用SqlLocalDB命令行管理LocalDB
- Oracle Merge备忘示例
- 在Eclipse中生成接口的JUnit测试类
- oracle数据库高级应用之《自动生成指定表的insert,update,delete语句》
- vagrant系列教程(三):vagrant搭建的php7环境(转)
- NSInvocation
- 如何写出无法维护的代码(JAVA版)
- (基础篇) php中0与空 Null false的区别
- RecyclerView(6)自定义RecyclerView.LayoutManager
- git常用命令速查
- hadoop部署
- ClickHouse之clickhouse-local
- Centos 7 关闭selinux and firewall
- C# 图像处理:将图像(24位真彩)转为 8位灰度图像 采用了内存法,大大提高了效率
- J-Link调试查看变量值总是显示<;not in scope>; 和<;cannot evaluate>;问题
- Caffe常用层参数介绍
- 5句mysql语句
- 〖Android〗联想K860 logcat CM11.0出错信息及解决
热门文章
- Tkinter 之Scale滑块标签
- HNOI2009有趣的数列
- Hibernate 生成策略和缓存策略
- 阿里云服务器发送邮件:Connection could not be established with host smtp.qq.com [Connection timed out #110]
- 【Maven】为什么Maven dependencies有的jar包显示为灰色?
- 关于form与表单提交操作的一切
- ASP如何将table导出EXCEL表格
- 23 Flutter官方推荐的状态管理库provider的使用
- 一秒 解决 ERROR 1044 (42000): Access denied for user &#39;&#39;@&#39;localhost&#39; to database &#39;mysql 问题
- UIScrollView实现自动循环滚动广告