按兑换率从大到小排例,比较m和f的大小,m>f,则加当前的j,并m减去f,否则m*兑换率,m=0.
#include<stdio.h>
typedef struct
{
int j,f;
double r;
}node;
node a[10000],temp;
int main()
{
int m,n,i;
while(scanf("%d%d",&m,&n)==2&&(n!=-1||m!=-1))
{
for(i=0;i<n;i++)
{
scanf("%d%d",&a[i].j,&a[i].f);
a[i].r=1.0*a[i].j/a[i].f;
}
int e;
for(i=0;i<n-1;i++)
for(e=i+1;e<n;e++)
if(a[i].r<a[e].r)
{
temp=a[i];a[i]=a[e];a[e]=temp;
}
double sum=0;
for(i=0;i<n;i++)
if(m>=a[i].f)
{
sum+=a[i].j;
m-=a[i].f;
}
else
{
sum+=m*a[i].r;
m=0;break;
}
printf("%.3lf\n",sum);
}
return 0;
}