总体思路就是按单价排序,然后先卖贵的
#include#include typedef struct mcake{ //定义一个月饼结构体,当然用二维数组处理也可以 double storage; //定义成double "正数" double price; //定义成double "正数" }mcake; int compare(const void *a,const void *b){ mcake c=*(mcake *)a; mcake d=*(mcake *)b; return d.price/d.storage > c.price/c.storage ? 1 : -1; //按降序排列单价,注意是单价 } int main(){ int n,d; double count=0.0; scanf("%d %d",&n,&d); mcake cakes[n]; for(int i=0;i d){ //如果供不应求,就按比例算 count+=cakes[i].price * d/cakes[i].storage; break; } } printf("%.2lf",count); //按格式输出 return 0; }
1.是要按单价排序,开始写成按售价排序,逻辑错误了,很致命
2.定义成double类型,正数和正整数还是不一样的,如果定义成int型,有个测试点不过(别问我为什么知道)



