本题开始时很懵逼,因为我不知道m是代表什么,但后面经过结果与输入的观察发现m就是肥鼠所拥有的猫粮,由于每个仓库的JavaBean的数量和兑换率不同,所以这个题我想到用结构体进行求解。
#include <stdio.h>
#include <stdlib.h>
struct food{
double a,b;
double bl;
}f[1000];
void sort(struct food f[],int n)
{
int i,j;
struct food k;
for(i=0;i<n;i++)
for(j=i+1;j<n;j++)
{
if(f[i].bl<f[j].bl)
{
k=f[i];
f[i]=f[j];
f[j]=k;
}
}
}
int main()
{
int n,m,i;
double sum;
while(scanf("%d%d",&m,&n)!=EOF)
{
if(m==-1&&n==-1)
break;//终止标志
sum=0.0;
for(i=0;i<n;i++)
{
scanf("%lf%lf",&f[i].a,&f[i].b);
f[i].bl=f[i].a/f[i].b;//输入每个仓库的JavaBean量,和兑换完需要的猫粮,以及兑换率
}sort(f,n);//按照兑换率从高到低进行排序,要得到最大JavaBean量,应当首先兑换比率最高的
for(i=0;i<n;i++)
{
if(f[i].b>=m)
{
sum+=m*f[i].bl;
break;
}//如果m(f[i].b>=m)则兑换即将结束sum加上剩余m能兑换的JavaBean量然后break;
else
{
sum+=f[i].a;
m-=f[i].b;
}
}
printf("%.3lf\n",sum);
}
return 0;
}