题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2187
题目简问:
解题思路:
已知给出了 总钱数 和 一共的种类
1. 对给出的大米,按照价格进行升序,即让最便宜的大米排在最上面
2. 如果当前的 大米单价*数量>总钱数,则 一共能买 sum+= 总钱数/单价
否则 sum+=当前大米的总重量,同时总钱数-=大米单价*数量。
3.输出 sum 即可,注意格式。
AC 代码:
#include <stdio.h>
#include <stdlib.h>
struct N
{
int dj,zl;
};
int cmp(const void *a,const void *b)
{
N *a1=(N *)a;
N *b1=(N *)b;
return a1->dj - b1->dj;
}
int main(void)
{
int c,tp,i;
double mo,sum;
struct N n[1010];
scanf("%d",&c);
while(c--)
{
sum=0;
scanf("%lf%d",&mo,&tp);
for(i=0; i<tp; i++)
{
scanf("%d%d",&n[i].dj,&n[i].zl);
}
qsort(n,tp,sizeof(n[0]),cmp);
for(i=0; i<tp; i++)
{
if((n[i].dj*n[i].zl)>=mo)
{
sum+=mo/(n[i].dj);
break;
}
else
{
mo-=(n[i].dj*n[i].zl);
sum+=n[i].zl;
}
}
printf("%.2f\n",sum);
}
return 0;
}