题意
给你一个n表示n种月饼,一个d表示市场的最大需求量,接着是每种月饼的库存量,最后是每种月饼的总售价,要求求出最大收益(并精确到小数后2位)
思路
1.将求出月饼的单价惊醒从大到小的排序
2.取单价高的进行出售
3.最后计算总值,进行求和
坑点
无
代码
#include<bits/stdc++.h>
using namespace std;
struct name{
double w;//总库存
double p;//总售价
double x;//单价
}a[1005];
bool cmp(name a,name b)
{
return a.x>b.x;//将单价进行从大到小排序
}
int main()
{
int n,m;//n种月饼,m 个需求量
double sum;//需要保留两位小数,因此要用到 double
while(scanf("%d%d",&n,&m)!=EOF)//多组输入
{
sum=0;//初始总盈利为0
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i].w);//读入各个的库存
}
for(int i=0;i<n;i++)
{
scanf("%lf",&a[i].p);//各个的总售价
a[i].x=(double)a[i].p/(a[i].w*1.0);//求出各个的单价
}
sort(a,a+n,cmp);//排序
int f=-1;//记录状态
for(int i=0;i<n;i++)
{
if(m>=a[i].w)//如果需求量大于月饼的库存量
{
sum+=(double)a[i].p;//盈利加上它的总售价
m-=a[i].w;//库存需减去买过的
}
else//相反
{
f=-1;//无法买了
break;//停止
}
}
if(m!=0&&f!=-1)//如果 需求量 >0 ,但是无法全部买
{
sum=sum+m*a[f].x;//那么就加上剩余的单价
}
printf("%.2lf\n",sum);//最后输出总盈利
}
return 0;
}
总结
难度中等,读清题意,最大盈利因此需先加上最高售价的月饼