理解:
要算出最大收益必须计算出每种月饼的单价,通过比较单价进行由大到小的逆序排序,对排序后的数组计算最大收益。建议不要使用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
学习:
- 用 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)



