PAT (Advanced Level) Practice 1070 Mooncake

本文介绍了一种通过贪心算法解决月饼销售问题的方法,旨在最大化收益。首先,文章解释了如何按月饼单价降序排列,然后选择单价最高的月饼进行销售。此外,还特别讨论了处理库存不足情况的策略,确保算法的健壮性。

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

一、概述

很简单的一道贪心题目,如何卖月饼使收益最大。

降序排列月饼单价并选择即可。注意,存在所有的月饼都不够卖的情况,对于这种情况,要特殊说明,否则会出现段错误。

二、分析

结构体存储,sort排序单价,都很简单。

只有一点注意:

i=0;
while(D-Cake[i].amount>0)
{
	D=D-Cake[i].amount;
	sum+=Cake[i].price;	
	i++;
	if(i==N)
	break;
} 
if(i<N)
  sum+=Cake[i].price*(D/Cake[i].amount);

这里不规定i的范围,会导致段错误。

三、总结

虽说是贪心,感觉和模拟也差不多。

PS:代码如下

#include<stdio.h>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;

struct mooncake
{
	double amount;
	double price;
	double per;
}Cake[1010];

bool cmp(mooncake a,mooncake b)
{
	return a.per>b.per;
}

int main()
{
	int N,D;
	scanf("%d %d",&N,&D);
	int i;
	for(i=0;i<N;i++)
		scanf("%lf",&Cake[i].amount);
	for(i=0;i<N;i++)
		scanf("%lf",&Cake[i].price);
	for(i=0;i<N;i++)
		Cake[i].per=Cake[i].price/Cake[i].amount;
	sort(Cake,Cake+N,cmp);
	double sum=0;
	i=0;
	while(D-Cake[i].amount>0)
	{
		D=D-Cake[i].amount;
		sum+=Cake[i].price;	
		i++;
		if(i==N)
		break;
	} 
	if(i<N)
	  sum+=Cake[i].price*(D/Cake[i].amount);
	printf("%.2lf",sum);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值