PAT 乙级 1020 月饼 (25分)Java实现

版权声明:转载请注明出处 https://blog.csdn.net/qq799028706/article/details/84188453

原题链接:月饼

1. 题意

题意比较明了,就是让我们求最大的收益

2. 思路

这道题用Java写要注意两个地方

  1. 输入的时候不能使用Scanner类,因为输入的数据比较多,使用Scanner输入会很慢,所以我们要用BufferedReader类,得到字符串后,再转为double型计算
  2. 输出保留两位小数,Java的做法:String.format("%.2f", sum)

3. 代码

package bas1020;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;

public class Main {
    static class Cake implements Comparable<Cake>{
        double amount;
        double price;
        double value;
        
        public Cake(double amount, double price, double value) {
           this.amount = amount;
           this.price = price;
           this.value = value;
        }

        @Override
        public int compareTo(Cake o) {
            return value > o.value ? -1 : 1;
        }
        
    }
    
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        String[] in = br.readLine().split(" ");
        int n = Integer.parseInt(in[0]);
        int d = Integer.parseInt(in[1]);

        ArrayList<Cake> list = new ArrayList<Cake>();
        String[] w = br.readLine().split(" "), pr = br.readLine().split(" ");
        
        for (int i = 0; i < n; i++) {
            double m = Double.parseDouble(w[i]);
            double p = Double.parseDouble(pr[i]);
            double value = p/m;
            list.add(new Cake(m, p, value));
        }
        
        Collections.sort(list);

        double sum = 0;
        for (int i = 0; i < n; i++) {
            if (d - list.get(i).amount >= 0) {
                sum += list.get(i).price;
                d -= list.get(i).amount;
            } else {
                sum += list.get(i).value * d;
                break;
            }
        }
        System.out.println(String.format("%.2f", sum));
    }
}

测试图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq799028706/article/details/84188453