试题链接:https://www.nowcoder.com/questionTerminal/6fc9a928c7654b0fbc37d16b8bd29ff9
关键词:简单贪心策略,数组,排序
ac代码如下所示:
#include<iostream>
#include<algorithm>
#include<iomanip>
using namespace std;
struct mooncake{
float store; //库存量
float totalprice; //总价
float price; //单价
};
bool cmp(mooncake a,mooncake b){
if(a.price>b.price)return true;
else return false;
}
int main(){
int num; //月饼种类数
int totalNeed;
float totalSales=0; //总销售额
cin>>num>>totalNeed;
mooncake mks[num];
for(int i=0;i<num;i++){
cin>>mks[i].store;
}
for(int i=0;i<num;i++){
cin>>mks[i].totalprice;
mks[i].price=mks[i].totalprice/mks[i].store; //求单价
}
sort(mks,mks+num,cmp); //按照单价的多少去排序
for(int i=0;i<num;i++){
if(totalNeed>mks[i].store){
totalNeed-=mks[i].store;
totalSales+=mks[i].totalprice;
}else{
totalSales+=totalNeed*mks[i].price;
totalNeed=0;
break;
}
}
cout<<fixed<< setprecision(2)<<totalSales<<endl;
return 0;
}