PAT 乙级 1020 乙级 月饼 25分

本文介绍了一种根据月饼单价从高到低进行销售的算法,确保在有限的库存条件下获得最大收益。算法首先对不同类型的月饼按单价进行排序,然后根据市场需求依次出售单价最高的月饼,直至满足市场需求或库存售罄。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200

/* 
 * 1. 最大收益 —— 单价从高到低 出货
 * 2. 需要考虑 全部库存仍无法满足需求 的情况 
 */
#include <stdio.h>
#include <stdlib.h> 

typedef struct {
	double inv;//库存 
	double price;//售价 
} mooncake; 
int cmp(const void *a, const void *b) {
	mooncake cake1 = *(mooncake *)a;
	mooncake cake2 = *(mooncake *)b;
	return cake2.price / cake2.inv > cake1.price / cake1.inv; //按单价降序 
}
int main() {
	int N, D;//月饼的种类数, 市场需求量
	scanf("%d %d", &N, &D);
	mooncake cake[N];//月饼的种类 
	for (int i = 0; i < N; i++) {//读入库存
		scanf("%lf", &cake[i].inv);
	}
	for (int i = 0; i < N; i++) {//读入售价
		scanf("%lf", &cake[i].price);
	}
	qsort(cake, N, sizeof(mooncake), cmp);
	double income = 0.0;//收入 
	for (int i = 0; i < N && D > 0; i++) {//市场仍然有需求,遍历库存 
		if (D <= cake[i].inv) {//如果该月饼能满足需求量 
			income += D * (cake[i].price / cake[i].inv);
			D = 0;
		} else {//如果该月饼不能满足需求量 
			income += cake[i].price;
			D -= cake[i].inv; //更新需求量 
		}
	}
	printf("%.2f\n", income); 
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值