首页 > 编程语言 >1020 月饼(JAVA)

1020 月饼(JAVA)

时间:2022-10-17 20:38:23浏览次数:42  
标签:JAVA 1020 月饼 int double yb flag priceOne


月饼是中国人在中秋佳节时吃的一种传统食品,不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量,请你计算可以获得的最大收益是多少。

注意:销售时允许取出一部分库存。样例给出的情形是这样的:假如我们有 3 种月饼,其库存量分别为 18、15、10 万吨,总售价分别为 75、72、45 亿元。如果市场的最大需求量只有 20 万吨,那么我们最大收益策略应该是卖出全部 15 万吨第 2 种月饼、以及 5 万吨第 3 种月饼,获得 72 + 45/2 = 94.5(亿元)。

输入格式:

每个输入包含一个测试用例。每个测试用例先给出一个不超过 1000 的正整数 N 表示月饼的种类数、以及不超过 500(以万吨为单位)的正整数 D 表示市场最大需求量。随后一行给出 N 个正数表示每种月饼的库存量(以万吨为单位);最后一行给出 N 个正数表示每种月饼的总售价(以亿元为单位)。数字间以空格分隔。

输出格式:

对每组测试用例,在一行中输出最大收益,以亿元为单位并精确到小数点后 2 位。

输入样例:

3 20
18 15 10
75 72 45

输出样例:

94.50

代码实现:

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

/**
* @author yx
* @date 2022-07-14 13:30
*/
//涉及到一个元素有多个属性值的,二话不说直接构造类,存放属性值
//一旦构造类用来存相应的属性还需要重新定义一下排序的方法即compareTo()方法
public class Main {
static PrintWriter out=new PrintWriter(System.out);
static BufferedReader ins=new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer in=new StreamTokenizer(ins);

static class Y_B implements Comparable<Y_B>{
double number;
double allPrice;
double priceOne;
Y_B(double number,double allPrice){
this.number=number;
this.allPrice=allPrice;
this.priceOne=allPrice/number;
}

@Override
public int compareTo(Y_B o) {
//(降序) 这个地方因为是double所以不能用 o.priceOne-this.priceOne>0
if(o.priceOne-this.priceOne>0){
return 1;
}else {
return -1;
}
}
}
public static void main(String[] args) throws IOException {
in.nextToken();
int N=(int) in.nval;
in.nextToken();
int xuQiu=(int) in.nval;
String[] split1=ins.readLine().split(" ");
String[] split2=ins.readLine().split(" ");
double ans=0;
ArrayList<Y_B> yb=new ArrayList<>();
for (int i = 0; i < N; i++) {
yb.add(new Y_B(Double.parseDouble(split1[i]),Double.parseDouble(split2[i])));
}
Collections.sort(yb);
int flag=0;
while (flag<N){
if(xuQiu<yb.get(flag).number){
ans+=xuQiu*yb.get(flag).priceOne;
break;
}else {
ans+=yb.get(flag).allPrice;
xuQiu=xuQiu-(int) yb.get(flag).number;
}
flag++;//这个flag要放在最后加
}
out.printf("%.2f",ans);
out.flush();
}
}

标签:JAVA,1020,月饼,int,double,yb,flag,priceOne
From: https://blog.51cto.com/u_15754851/5764303

相关文章

  • 1013 数素数(JAVA)
    令Pi表示第i个素数。现任给两个正整数M≤N≤104,请输出PM到PN的所有素数。输入格式:输入在一行中给出M和N,其间以空格分隔。输出格式:输出从PM到PN的所有素数,每......
  • 1012 数字分类(JAVA)
    给定一系列正整数,请按要求对数字进行分类,并输出以下5个数字:A1​=能被5整除的数字中所有偶数的和;A2​=将被5除后余1的数字按给出顺序进行交错求和,即计算n1​−n......
  • 1011 A+B 和 C(JAVA)
    给定区间[−231,231]内的3个整数A、B和C,请判断A+B是否大于C。输入格式:输入第1行给出正整数T(≤10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给......
  • 1011 A+B 和 C(JAVA)
    给定区间[−231,231]内的3个整数A、B和C,请判断A+B是否大于C。输入格式:输入第1行给出正整数T(≤10),是测试用例的个数。随后给出T组测试用例,每组占一行,顺序给......
  • java第30天sql基础
    MYSQL1.sql语句(1)sql语句:结构化查询语言-->写一段只能被数据库识别的语句,可以对数据库中的数据进行增删改查操作(2)sql语句的组成:DML:数据操作语言-->数据库中的......
  • java--Integer和Character常用方法
    //装箱:基本类型转换为包装类对象。通过包装类.valueOf();实现//Integernum2=Integer.valueOf(100);   Integernum1=100;   Integernum3=newInte......
  • Java8中处理日期和时间的常用API
    场景java8中引入了一个新包java.time,包含了多数会用到的核心类。注:博客:https://blog.csdn.net/badao_liumang_qizhi关注公众号霸道的程序猿获取编程相关电子书、教......
  • 2022年最新最全1100+JAVA服务端面试题
    ​Hash索引和B+树区别是什么?你在设计索引是怎么抉择的?描述下Redis的回收策略(淘汰策略)?描述下JVM类加载机制与对象的生命周期?为什么HashMap中String、Integ......
  • java 静态代码块 非静态代码块
    java中的静态代码块在类加载的时候调用(只调用一次),普通代码块在创建对象(只要创建新的对象都会调用一次)的时候调用,普通代码快的调用在构造方法之前publicclassPuTong......
  • javaweb
    <td><astyle="color:blue"href='showall.jsp?name=<%=(d.getName())%>'><%=(d.getName())%></a></td>                   ......