AC代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 struct mk 4 { 5 double storage; 6 double sumPrice; 7 double perPrice; 8 }; 9 int cmp(const void *a,const void *b) //用于qsort按照单价排序 10 { 11 struct mk m1 = *(struct mk*)a; 12 struct mk m2 = *(struct mk*)b; 13 return m2.perPrice > m1.perPrice?1:-1; //仔细思考这一行 14 } 15 int main () 16 { 17 int num; 18 double need; 19 double ret = 0.0; 20 scanf("%d %lf",&num,&need); 21 struct mk list[1100]; 22 int i; 23 for(i = 0;i < num;i++) 24 { 25 scanf("%lf",&list[i].storage); 26 } 27 for(i = 0;i < num;i++) 28 { 29 scanf("%lf",&list[i].sumPrice); 30 } 31 for(i = 0;i < num;i++) //以上为输入 32 { 33 list[i].perPrice = list[i].sumPrice/list[i].storage; 34 } 35 qsort(list,num,sizeof(list[0]),cmp); 36 i = 0; 37 while(need != 0) 38 { 39 if(need > list[i].storage) //需求大于库存 40 { 41 need = need - list[i].storage; 42 ret = ret + list[i].sumPrice; 43 if( i == num-1) //全部用完还是没满足需求 44 { 45 need = 0; 46 } 47 } 48 else //需求小于库存 49 { 50 ret = ret + list[i].perPrice * need; 51 need = 0; 52 } 53 i++; 54 } 55 printf("%.2lf ",ret); 56 return 0 ; 57 }