这道题一开始我计算总profit的时候是用一个while循环的,但是这样倒数第二个测试点会有段错误。我思考了 一下认为应该是提供的月饼全卖出去都无法满足那个amount,这样的话我的while循环就会一直进行下去,直到超过了list[1010],就产生了段错误,因此要想用while循环,还需要加一些限定条件。
#include <stdio.h>
#include <algorithm>
using namespace std;
struct mooncake{
double amount;
double price;
double avg;
}list[1010];
bool cmp(mooncake a,mooncake b){
return a.avg>b.avg;
}
int main(){
int n;
double total;
scanf("%d %lf",&n,&total);
for(int i=0;i<n;i++){
scanf("%lf",&list[i].amount);
}
for(int i=0;i<n;i++){
scanf("%lf",&list[i].price);
}
for(int i=0;i<n;i++){
list[i].avg=list[i].price/list[i].amount;
}
sort(list,list+n,cmp);
int index=0;
double sum=0;
for(int i=0;i<n;i++){
if(list[i].amount<=total){
sum=sum+list[i].price;
total=total-list[i].amount;
}else{
sum=sum+total*list[i].avg;
break;
}
}
printf("%.2f",sum);
return 0;
}