PAT(Basic Level) Practice : 1020 月饼 (25分)

1020 月饼 (25分)

注意:

double类型多次乘除过后可能会有微小差异

如果是把每种月饼单价都求出来,再乘以库存,最后加起来,会导致第三个测试点不能通过
举个例子:

double a=90;
double b=a/15;
double c=b*15;

c不一定是90,可能是90.0001或者89.9999

解决

如果需求量>库存,直接加上给出的总价,而不要用算出来的单价*总数。

代码

#include <iostream>
#include"stdlib.h"
#include <vector>
#include <cstdio>
#include <algorithm>
#include <sstream>
using namespace std;

#include<iomanip>

class mooncake
{
public:
    double stock;
    double price;
    double all_price;

    mooncake()
    {
        stock=0;
        price=0;
        all_price=0;
    }
};

bool compare(mooncake m1,mooncake m2)
{
    return m1.price>m2.price;
}

int main()
{
    int num,demand;
    cin>>num>>demand;

    vector<mooncake> mcake;
    for(int i=0;i<num;i++)
    {
        mooncake m1;
        cin>>m1.stock;
        mcake.push_back(m1);
    }

    for(int i=0;i<num;i++)
    {
        double temp;
        cin>>temp;
        mcake[i].all_price=temp;
        mcake[i].price=temp/mcake[i].stock;
    }
    sort(mcake.begin(),mcake.end(),compare);

    double sum=0;
    for(int i=0;i<num;i++)
    {
        if(demand==0)
            break;
        if(demand>=mcake[i].stock)
        {
            sum+=mcake[i].all_price;
            demand-=mcake[i].stock;
        }else{
            sum+=demand*mcake[i].price;
            demand=0;
        }
    }
    cout.setf(ios::fixed);
    cout<<setprecision(2)<<sum<<endl;
    return 0;
}

posted @ 2020-09-19 22:04  韩天尊  阅读(132)  评论(0)    收藏  举报