用LUA(和C++)刷PAT (Advanced Level) ——1070 Mooncake

这段代码实现了一个购买策略,根据输入的月饼数量和需求量,按价格/单位量的比例进行排序,以最小成本满足需求。程序首先读取月饼的数量和需求量,然后对月饼结构体数组按照价格和量的比例进行排序,最后依次购买直至满足需求或用完所有月饼,输出总成本。
摘要由CSDN通过智能技术生成
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>

using namespace std;

struct node{
    float amount;
    float price;
};

bool comp(node a, node b) { return a.price / a.amount > b.price / b.amount; }

int main()
{
    int N, demand;
    cin>>N>>demand;
    vector<node> mooncakes(N);
    float price = 0;
    
    for(int i = 0; i < N; i++)
        scanf("%f", &(mooncakes[i].amount));
    for(int i = 0; i < N; i++)
        scanf("%f", &(mooncakes[i].price));

    sort(mooncakes.begin(), mooncakes.end(), comp);
    for(auto itr = mooncakes.begin(); itr != mooncakes.end(); itr ++)
    {
        if (itr -> amount > demand){
            price += itr -> price * demand / itr -> amount;
            cout<<setiosflags(ios::fixed)<<setprecision(2)<<price<<endl;
            return 0;
        }
        price += itr -> price;
        demand -= itr ->amount;
    }
    
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<price<<endl;
    
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值