感觉自己这段代码写的很漂亮,记录一下
题目网址 https://pintia.cn/problem-sets/994805260223102976/problems/994805301562163200
#include <iostream>
#include <iomanip>
#include <algorithm>
using namespace std;
struct moonCake{
double inventory; //库存
double total; //总售价
double price; //单价
void cal(){
price = (double)total/(double)inventory;
}
};
//从大到小排序,返回的是大于
bool compare(moonCake m1, moonCake m2){
return m1.price > m2.price;
}
int main(){
int n, m; //n是由几种月饼,m是市场的最大需求量
cin >> n >> m;
int i;
moonCake *mc = new moonCake[n];
for(i=0; i<n; i++){
cin >> mc[i].inventory;
}
for(i=0; i<n; i++){
cin >> mc[i].total;
mc[i].cal();
}
sort(mc, mc+n, compare); //对mc从大到小排序
//遍历mc数组,计算最大收益
double profit=0;
for(i=0; i<n; i++){
if(m > mc[i].inventory){
profit += mc[i].total;
m -= mc[i].inventory;
continue;
} else if(m == mc[i].inventory){
profit += mc[i].total;
m -= mc[i].inventory;
break;
} else if(m < mc[i].inventory){
double copies = mc[i].inventory / m;
profit += (mc[i].total / copies);
break;
}
}
//输出结果
cout << setiosflags(ios::fixed)<<setprecision(2)<<profit<<endl;
}