测试点3的问题
在于剩余的需求还存在,但是库存没有了,我的前面的判断出循环的条件是需求没了并且N不是0,
修改在于
当前种类的月饼库存小于剩余需求,并且此种类是排序后的嘴一个元素
#include<stdio.h>
struct product{
double save;
double sumprice;
double per;//单价用来最为选择的标准
};
void sort(struct product *pro,int N)
{
int i,j;
struct product t;
for(i=0;i<N-1;i++)
{
for(j=i+1;j<N;j++)
{
if(pro[i].per<pro[j].per)
{
t=pro[i];
pro[i]=pro[j];
pro[j]=t;
}
}
}
}
int main()
{
int N,i;//N是种类,D是市场需求;
struct product pro[1000];
double price=0,D;
scanf("%d %lf",&N,&D);
for(i=0;i<N;i++) scanf("%lf",&pro[i].save);
for(i=0;i<N;i++) scanf("%lf",&pro[i].sumprice);
for(i=0;i<N;i++) pro[i].per=pro[i].sumprice/pro[i].save;//算出单价
sort(pro,N);//对单价进行降序排序
i=0;
while(D!=0&&N!=0)
{
if(pro[i].save<D)//小于剩下的需求将此种类的全部卖掉
{
price+=pro[i].sumprice;
D-=pro[i].save;
i++;
if(i==N) break;//剩下的需求存在,但是月饼库存没了 ,不在进行,输出
}
else //大于等于市场需求,输出此种类的市场剩余需求占次种类总库存的比例*总价格
{
price+=D/pro[i].save*pro[i].sumprice;
D=0;
}
}
printf("%.2f",price);
}