PAT 乙級 1020.月餅 C++/Java

題目來源html

月餅是中國人在中秋佳節時吃的一種傳統食品,不一樣地區有許多不一樣風味的月餅。現給定全部種類月餅的庫存量、總售價、以及市場的最大需求量,請你計算能夠得到的最大收益是多少。ios

注意:銷售時容許取出一部分庫存。樣例給出的情形是這樣的:假如咱們有 3 種月餅,其庫存量分別爲 1八、1五、10 萬噸,總售價分別爲 7五、7二、45 億元。若是市場的最大需求量只有 20 萬噸,那麼咱們最大收益策略應該是賣出所有 15 萬噸第 2 種月餅、以及 5 萬噸第 3 種月餅,得到 72 + 45/2 = 94.5(億元)。測試

輸入格式:

每一個輸入包含一個測試用例。每一個測試用例先給出一個不超過 1000 的正整數 N 表示月餅的種類數、以及不超過 500(以萬噸爲單位)的正整數 D 表示市場最大需求量。隨後一行給出 N 個正數表示每種月餅的庫存量(以萬噸爲單位);最後一行給出 N 個正數表示每種月餅的總售價(以億元爲單位)。數字間以空格分隔。spa

輸出格式:

對每組測試用例,在一行中輸出最大收益,以億元爲單位並精確到小數點後 2 位。code

輸入樣例:



3 20 18 15 10 75 72 45

分析:

這道題要求的是最大收益,給出月餅的種類和市場需求量,再給出它們的庫存和總售價。htm

首先求出不一樣月餅的單價,先計算單價最高的月餅(假定A的單價最大)blog

用一個結構體保存月餅的信息:月餅庫存,總售價,單價排序

按照單價高低對月餅信息進行排序,獲得單價最高的月餅ci

狀況1:A類月餅總庫存 > 市場最大需求量N,則最大收益 = A的單價 * 市場最大需求量get

狀況2:A類月餅庫存 < 市場最大需求量, 則A的收益 = A的單價 * 市場最大需求量

       新的市場最大需求 = 市場最大需求量 減去 A的庫存

            而後再從單價第二大的計算收益,

            最大收益 = 全部月餅收益

 注意:庫存用double類型,用int的話測試點2過不去

C++實現:

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <string>
 4 #include <cctype>
 5 #include <vector>
 6 #include <stack>
 7 #include <climits>
 8 #include <cstdio>
 9 #include <numeric>
10 using namespace std;
11 
12 typedef struct MoonCake {
13     double store;    //月餅庫存
14     double sell;    //總售價
15     double unitPrice;    //單價
16 }MoonCake;
17 
18 bool myCmp(MoonCake a, MoonCake b)
19 {
20     return a.unitPrice > b.unitPrice;
21 }
22 
23 int main()
24 {
25     int N;    //月餅種類數
26     double D;    //市場最大需求量
27     double result = 0;
28     cin >> N >> D;
29     vector<MoonCake> vecMoon(N);
30     for (int i = 0; i < N; ++i)
31     {
32         cin >> vecMoon[i].store;
33     }
34     for (int i = 0; i < N; ++i)
35     {
36         cin >> vecMoon[i].sell;
37         vecMoon[i].unitPrice = vecMoon[i].sell / vecMoon[i].store;
38     }
39     //按照單價高低排序
40     sort(vecMoon.begin(), vecMoon.end(), myCmp);
41     for (int i = 0; i < N; ++i)
42     {
43         if (vecMoon[i].store <= D)
44         {    
45             //該種類月餅的庫存小於市場最大需求
46             result = result + vecMoon[i].sell;
47         }
48         else
49         {
50             //庫存大於市場需求
51             result = result + vecMoon[i].unitPrice * D;
52             break;
53         }
54         D = D - vecMoon[i].store;
55     }
56     printf("%0.2lf", result);
57     return 0;
58 }

 

Java實現:

相關文章
相關標籤/搜索