正经题解|采购计划
2024-10-29 17:55:40
发布于:浙江
2阅读
0回复
0点赞
想买得多就需要找单价低的厂商优先购买。在计算每个厂商的单价并进行排序时,每个厂商的库存总数和总数量需要绑定在一起进行排序,所以用结构体排序。排序之后从单价低的厂商开始买,这样得到的总重量是最大的。
注意只买一部分时计算会出现小数,所以尽量使用 类型浮点数存储。另外在计算时,当前厂商的月饼如果能够全部买完,那么就直接全买下;如果当前厂商的月饼买不完,那就按照当前厂商的单价来计算购买到的数量。
#include <bits/stdc++.h>
using namespace std;
struct ybcj{//月饼厂家
double s;
double f;
double danjia;
}yb[1010];
bool cmp(ybcj a,ybcj b){
return a.danjia>b.danjia;
}
int main () {
int n,m;
int i;
cin>>m>>n;
for(i=0;i<n;i++){
cin>>yb[i].s;
cin>>yb[i].f;
yb[i].danjia=yb[i].s/yb[i].f;//计算每个厂家的单价 每1元钱能购买的数量
}
sort(yb,yb+n,cmp);//结构体排序
double sumt=0;//已购买重量
double summ=0;//已花费的钱数
for(i=0;i<n;i++){
if(summ+yb[i].f<=m){//当前厂家能全买完
summ=summ+yb[i].f;
sumt=sumt+yb[i].s;
}
else{//钱不够买完当前厂家的月饼
sumt=sumt+(m-summ)*yb[i].danjia;
summ=m;
}
if(summ>=m){
break;
}
}
printf("%.3f",sumt);
return 0;
}
这里空空如也
有帮助,赞一个