考察知识点:
1.数学知识运用
2.根据题目设置合理的结构
#include<stdio.h>
#include<stdlib.h>
typedef struct{//由于每种月饼的销售量与库存量一一对应,如果设置两个数组对其中一个排序会无法对应致错,故设置月饼的结构体数组
double a,b;
}wxxpp;
int cmp(const void *a,const void *b){//设置快排函数对月饼的每吨单价从大到小排序
return (*(wxxpp *)a).b-(*(wxxpp *)b).b>0?-1:1;//注意单纯的相减出现如0.1的情况会自动转换为整型的0,故要与0比较
}
int main(void){
int i,N,D;
wxxpp wxx[1000];//根据题目的范围设置大小
double max;//储存最大销售量
scanf("%d %d",&N,&D);
for(i=0;i<N;i++)
scanf("%lf",&wxx[i].a);
for(i=0;i<N;i++){
scanf("%lf",&wxx[i].b);
wxx[i].b/=wxx[i].a;//储存该种月饼每吨的价格
}
qsort(wxx,N,sizeof(wxxpp),cmp);
for(i=0,max=0;i<N;i++){
if(D>wxx[i].a){//每次将剩余需求量与该种月饼最大库存量比较
D-=wxx[i].a;
max+=wxx[i].a*wxx[i].b;
}
else{//不足则求剩余需求量的最大销售额
max+=D*wxx[i].b;
break;
}
}
printf("%.2lf",max);//按格式输出
return 0;
}